20 Haziran 2022 Pazartesi

Reified Generics

Giriş
Açıklaması şöyle. Type Erasure yazısına bakabilirsiniz.
Version 5 of Java brought generics. However, the language designers were keen on preserving backward compatibility: Java 5 bytecode was required to interact flawlessly with pre-Java 5 bytecode. That's why generic types are not written in the generated bytecode: it's known as type erasure. The opposite is reified generics, where generic types would be written in the bytecode.

Generic types being only a compile-time concern creates a couple of issues
Problem 1
Elimizde şöyle bir kod olsun. Bu iki kod için de üretilen bytecode aynıdır
class Bag {
  int compute(List<Foo> persons) {}
  int compute(List<Bar> persons) {}
}
Problem 2
Nesneyi aynı tipte geri alabilmek için şöyle yaparız. Yani Class<T> parametresini geçmek gerekir.
public interface BeanFactory {
  <T> T getBean(Class<T> requiredType);
}
Eğer Java'da Reified Generics olsaydı şöyle olurdu
public interface BeanFactory {
    <T> T getBean();
}



Hiç yorum yok:

Yorum Gönder