我有下一个通用对象:
DateTime.LocalNow
下一个界面:
public class A<T> {
T a;
.......
}
我尝试在类中实现此接口:
public interface SearchA{
........
public ArrayList<A> getChildren(A a);
}
在此实现中,尝试返回list时遇到错误,因为它的类型是public class AGraph implements SearchA{
......
public ArrayList<A> getChildren (A s)
{
.......
ArrayList<A<String>> list= new ArrayList();
....
return list;
}
}
而不是ArrayList<A<String>>
。我是否需要使接口ASearch通用? (将ArrayList<A>
添加到类的标题中)?还是我还有其他选择?
谢谢。
答案 0 :(得分:0)
您从接口SearchA
返回的方法ArrayList
包含A
的原始版本,但是在实际方法的实现中,您返回的ArrayList
包含一个通用的A
的版本。
因此,它们不相同并且不兼容。
快速修复:
public interface SearchA {
public List<A<String>> getChildren(A a);
}
public class AGraph implements SearchA {
@Override
public List<A<String>> getChildren(A a) {
List<A<String>> arrayList = new ArrayList<>();
return arrayList;
}
}
旁注:
在这种情况下最好使用new ArrayList<>()
而不是new ArrayList()
,因为后一种选择是未经检查的分配。
在方法的返回类型以及声明引用变量时,最好使用List
而不是ArrayList
。