我有课Category
实现接口(interface)CategoryManager
。接下来是Card
维持 List<Category>
.
现在我想返回此列表,但类别为 CategoryManager
,因此List<CategoryManager>
。我这样做的原因是 Category
的“公共(public)接口(interface)”非常难看,我想通过仅向外部用户显示干净的 CategoryManager
来缩小范围。 .
我该怎么做?
我想出了以下方法:
public <T extends CategoryManager> List<T> getAllCategories() {
return (List<T>) categories; //with categories beeing List<Category>
}
它确实有效,但我发现它相当难看,因为我正在转换并返回 List<T>
在这里,从而丢失信息......好吧,我想你会同意,由于各种原因,它并不漂亮。
有人能提供更好/更好的解决方案吗?
问候:-)
最佳答案
这一点与 .NET 示例中的情况相同。您不应该在集合类型之间进行转换。它之所以有效,是因为 Java 的 erasure 。如果你没有收到 Actor 的警告,我会有点惊讶。
最准确的选项是:
public List<? extends CategoryManager> getAllCategories()
{
return categories;
}
负面的是List<CategoryManager>
与 List<? extends CategoryManager>
不同。但是,它确实符合方法名称的建议意图。
关于java - 返回接口(interface)对象的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5861295/