java - 返回接口(interface)对象的列表

标签 java list generics interface return

我有课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/

相关文章:

java - JAX-RS JAXB Jackson 不使用@XmlRootElement 名称

python - 从 python 列表对象和单引号中删除前缀

python - 自动补零数组

java - 没有警告的通用接口(interface)比较器

c# - 使用具有多态性的通用接口(interface)

java - 尝试访问 android 应用程序中的联系人不断崩溃

java - 经过多少次迭代后,SecureRandom 将生成给定范围内的所有数字?

java - 在spring mvc中找不到css文件等资源

r - 检查列表是否嵌套

Java:是否可以将一个参数化类型用于另一个参数化类型?