Java'ya, T
'dan bağımsız olarak her zaman Child.class
'u döndürmesini söyleyemezsiniz. Ebeveynlerden Child
olmayan başka sınıflar olabilir. Ayrıca, herhangi bir yerde T
kullanmıyorsunuz, kodunuz çok anlamlı değil. İki olası çözümler:
public Class<? extends Parent> getAClass() {
return Child.class;
}
ya da belki
public <T extends Parent> Class<T> getAClass(Class<T> clazz){
return clazz;
}
İkinci örnek derler ama T
sınıf düzeyinde ilan edildi ise muhtemelen daha mantıklıdır.
Ayrıca, varolan getClass()
yöntemiyle bir ad çakışmasını önlemek için yönteminizi yeniden adlandırdım. açıkça mevcut uygulama için çalışma zamanında başarısız kaldığı
Class<SomeOtherChildClass> clazz = instance.getAClass();
(SomeOtherChildClass
varsayarak da Parent
genişletir): Bu kod yasal olsaydı
public Class Ebeveyn> getClass() {return Child.class; } Eserleri. ama ilk versiyonun neden çalışmadığını anlamıyorum. – user2201253
Eğer 'Child.class' için her zaman geri dönüyorsanız' Class 'kullanıyor olmanız gerekir ... Jenerikleri sadece anlamlı olduğu yerlerde kullanın ... –
Codebender