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
Problem 2class Bag {int compute(List<Foo> persons) {}int compute(List<Bar> persons) {}}
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