返回通用对象的Arraylist err

时间:2019-06-08 18:50:29

标签: java generics

我有下一个通用对象:

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>添加到类的标题中)?还是我还有其他选择?

谢谢。

1 个答案:

答案 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;
    }
}

旁注:

  1. 在这种情况下最好使用new ArrayList<>()而不是new ArrayList(),因为后一种选择是未经检查的分配。

  2. 在方法的返回类型以及声明引用变量时,最好使用List而不是ArrayList