我在理解以下场景时遇到了一些麻烦。我有一个由抽象类和扩展抽象类的具体类实现的“通用”接口。
问题是返回参数化列表的抽象类中的所有方法都丢失了它们的类型,所以我收到一个编译错误,告诉我它无法从对象转换为原始 List 类型。
谁能提供一些见解?
最后,我想要的是在抽象类上有一个 getId 和 setId 方法,其返回类型为java.lang.object
or <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()){
}
}
}
}