【发布时间】:2014-07-13 12:02:12
【问题描述】:
制作一个供内部使用的API,我需要一些Java抽象,我不知道该怎么做。
- 有一个接口 A 带有派生接口。
- 假设 A 的扩展接口之一称为 B。
- 假设有一个实现 B 的类 C。
我有一个工厂/池类 F,我想从中获取实例列表(或集合或类似集合)。 我想要的基本上是这样的:
List<B> instances = F.getAllSuitableInstances(parameters);
获取我的参数指定的所有实例作为 B 的集合。
第一次尝试是使用这个函数签名
public List<A> getAllSuitableInstances(parameters);但是当我尝试将生成的列表转换为列表以供使用时,我 被告知“不兼容的类型”——即使 B 是从 A 派生的。
所以我尝试了 java 库的作用:
public <T> List<T> getAllSuitableInstances(parameters, T);并尝试使用 B 作为第二个参数来调用它。但这不起作用 或者,因为出于某种原因必须将 T 作为实例提供,并且 接口不能有实例。
我知道我可以使用 <?> 进行强制转换,但我想让它尽可能类型安全。
那么,完成这项工作的(最佳)方法是什么?
【问题讨论】:
-
你是对的 - 上面提到的问题的答案也回答了我的问题。但是我没有找到其他问题,因为我没有寻找它的关键字(狗,动物,多态)。也许其他人会像我一样表达他们的搜索,所以这个问题的存在可能仍然对某人有用。
标签: java generics collections interface casting