我在理解以下情形時遇到了一些麻煩。 我有一個「generified」接口,由抽象類和擴展抽象類的具體類實現。抽象類上實現泛型接口的鬆散列表類型
問題是,抽象類返回參數化列表中的所有方法都失去了它們的類型,所以我得到一個編譯錯誤,告訴我它不能從對象轉換爲原始列表類型。
任何人都可以提供一些見解?
最後我想要的是抽象類上的getId和setId方法返回類型爲java.lang.object
或<T extends Object>
以及具體類將其返回類型實現爲他們想要的任何類型。
這裏是我的不同對象的代碼:
通用接口
public interface MyInterface<T>{
public T getId();
public void setId(T id);
}
一個抽象類實現接口
public abstract class MyAbstractClass<T> implements MyInterface<T>{
private List<String> texts;
private List<Integer> notes;
public List<String> getTexts(){
return texts;
}
public List<Integer> getNotes(){
return notes;
}
}
一個具體的類實現抽象類
public class MyConcreteClass implements MyAbstractClass<Integer>{
private Integer id;
public Integer getId(){
return this.id;
}
public void setId(Integer id){
this.id = id;
}
}
一些其他類:
public class SomeOtherClass{
public void process(List<T extends MyAbstractClass> myClassList){
// Compilation error ->
// Type mismatch: cannot convert from element type Object to String
for(MyAbstractClass myObj : myClassList){
System.out.println("object Id : " + myObj.getId());
// Compilation error ->
// Type mismatch: cannot convert from element type Object to String
for(String txt : myObj.getTexts()){
}
}
}
}
你可能需要'公共無效過程(MyAbstractClass MyClass的){'。注意在參數類型中增加了** **。 –
OldCurmudgeon
2013-03-18 10:12:11
是的,但事情是我想要能夠處理我的抽象類的所有子類型,以便調用for循環內的getId()方法。我只是編輯代碼,以更好地顯示我試圖嘗試 – ufasoli 2013-03-18 10:14:40