将List <myobject>转换为List <myinterface> </myinterface> </myobject>

时间:2011-09-27 11:49:47

标签: java class list interface casting

我正在用java编写一段代码,想要封装我的对象并只返回接口。

现在简而言之这是我的问题我有一个包含列表的类,我有一个返回List的getter。如何返回界面列表?

没有收到此错误警告:

列表是原始类型。对泛型类型List的引用应该参数化

为了让你清楚地了解这段代码是我问题的一个例子:

public class Employee{

  private List<MyObject> myObjects;

  public List<MyInterface> getMyObjects(){
    return myObjects;
  }

}

MyObject实现MyInterface并返回myObjects会产生问题。

提前致谢。

6 个答案:

答案 0 :(得分:2)

如果MyObject实施MyInterface,您可以将返回类型更改为List<? extends MyInterface>

class Employee{
  private List<MyObject> myObjects;

  public List<? extends MyInterface> getMyObjects(){
     return myObjects;
  }
}

请注意,在这种情况下,编译器不允许您在返回的列表上调用add(...),除非您在此处进行投射。但是,由于您只返回接口,我猜您不打算在返回的列表中添加任何内容,因此您应该没问题。

答案 1 :(得分:1)

只需声明您的界面列表作为实例变量。

private List<MyInterface> myObjects;

答案 2 :(得分:1)

我只需按照您需要的方式定义实例属性:

public class Employee{

  private List<MyInterface> myObjects;

  public List<MyInterface> getMyObjects(){
    return myObjects;
  }

}

答案 3 :(得分:1)

即使MyObject实施MyInterfaceList<MyObject>延伸List<MyInterface> 为真 - 有关详细信息,请参阅this excellent document 。为了通知编译器您的意图,请指定方法签名,如下所示:

public List<? extends MyInterface> getMyObjects{
    ...

答案 4 :(得分:0)

答案 5 :(得分:0)

您无法将List<MyObject>投射到List<MyInterface>。因此,请尝试将myObjects定义为List<MyInterface>或使用以下内容:

public class Employee{
  private List<MyObject> myObjects;

  public List<MyInterface> getMyObjects(){
    List<MyInterface> result = new ArrayList<MyInterface>(myObjects.size());
    result.addAll(result);
    return result;
  }
}