19 Ekim 2017 Perşembe

Type Erasure

Örnek
Şu kod type erasure yüzünden derlenmez. Aslında amaç bazı Class tipinin kodlanmamasını sağlamak.
public class Publisher<T> {

  private static final Class[] SUPPORTED_CLASSES = new Class[]{T1.class, T2.class};

  public Publisher() {
    if(Arrays.asList(SUPPORTED_CLASSES).contains(T)) { // error: expression expected!
      System.out.println("Class not supported!");
    }
  }
}
Çünkü T'nin tipi çalışma esnasında yoktur. Yani
new Publisher<T1>
ile
new Publisher<T2>
arasındali farkı kaybederiz.

Çözüm
Düzeltmek için şöyle yaparız.
public Publisher(Class<T> clazz) {
  if(!SUPPORTED_CLASSES.contains(clazz)) {
    System.out.println("Class not supported!");
  }
}
Çözüm
Şöyle yaparız. Böylece sadece MyInterface'ten kalıtan sınıflar derlenebilir.
public class Publisher<T extends S, MyInterface>

Hiç yorum yok:

Yorum Gönder