Son birkaç gündür kafamı bu sorun üzerinde becermeye çalıştım ve hiçbir şey düşünemediğim her şeyi araştırıyorum.Arabirimi kendi dönüş tipiyle aradığınızda Java türü uyuşmazlığı?
Arabirim aracılığıyla başka biriyle etkileşimde bulunan bir sınıfa sahibim. Bana yeterince basit görünen kod ile bazı tür uyumsuzluk hataları alıyorum.
public class FooBar {
Foo<? extends Bar> X = new Y();
public void test(){
if X.isA(X.B()){
//do something; type mismatch here
}
}
}
Arayüz:
public interface Foo<T extends Bar> {
public T B();
public boolean isA(T t);
}
Uygulama: konunun
public class Y implements Foo<T extends Bar> {
public int B(){
return 5;
}
public boolean isA(int num){
int A = 10;
return (A == num) ? true : false;
}
Demek istediğim yöntemi testidir(). Arabirim üzerinden bir sayı alıyorum, ardından uygulama sınıfının aynı örneğiyle test ediyorum, ancak bu bana bir yakalama/tür uyuşmazlığı hatası veriyor.
CAP # 1, Bar'ın yakalanmasını? Bar
'u genişletir CAP # 2 Barın yakalanmasını kapar? Bar
Aramalarımda bulduğum birçok şeyi denedim, ancak bunların hiçbiri işe yaramadı. Jenerik ve arayüzler benim için yeni ve hala onları öğreniyorum. Şimdiden herhangi bir yardım için teşekkür ederiz!
'yerine' int' ait 't' almak isA' gerekmez mi? Veya sınıfın imzası "public class Y" olarak değiştirildi. Foo ' –
Bir yan not olarak dönüş (A == num)? true: false; '' return A == num; ' – Guy
Bar sınıfı nerede? – pczeus