返回接口对象列表

时间:2011-05-02 19:05:39

标签: java list generics interface return

我有一个实现接口Category的类CategoryManager。接下来有Card维护List<Category>

现在我想返回此列表,但类别为CategoryManager,因此List<CategoryManager>。我这样做的原因是Category的“公共界面”极其丑陋,我想通过向外部用户展示干净CategoryManager来缩小范围。

我该怎么做?

我想出了以下方法:

public <T extends CategoryManager> List<T> getAllCategories() {
          return (List<T>) categories; //with categories beeing List<Category>

}

它确实有效,但我发现它相当丑陋,因为我在这里投掷并返回List<T>,从而失去了信息......嗯,我想你会认为它对各种各样不好的原因。

任何人都可以提供更好/更好的解决方案吗?

问候: - )

2 个答案:

答案 0 :(得分:1)

同样的观点与.NET示例中的含义相同。您不应该在集合类型之间强制转换。它的工作原理是因为Java的erasure。如果你没有得到演员的警告,我会有点惊讶。

最准确的选择是:

public List<? extends CategoryManager> getAllCategories()
{
    return categories;
}

否定的是List<CategoryManager>List<? extends CategoryManager>不同。但是,它确实符合方法名称的建议意图。

答案 1 :(得分:1)

不需要<T extends CategoryManager>位,这会使getAllCategories成为generic method。这样可以正常工作:

public class Category implements CategoryManager
{   
    List<Category> categories = new ArrayList<Category>();

    public List<? extends CategoryManager> getAllCategories()
    {
        return categories;
    }
}