我最近遇到了以下模式的实例:
public interface IFooFactory {
<K> Foo<K> create();
}
参见 here举个具体的例子。除了使用 Object 的正式类型参数实例化 Foo 之外,我看不到客户端程序员在 create 的实现中应该做什么或者根本没有正式的类型参数。我也看不出框架设计者试图通过以这种方式定义接口(interface) IFooFactory 来表达什么好处或类型约束。
最佳答案
考虑 Collections.emptyList()
。返回的列表对象总是相同的:由于列表是空的且不可变的,因此调用者无法对返回的对象做任何事情,以使其根据替换类型参数的具体类型显示不同的行为。因此,单个实现(使用原始类型)就足够了:
public static <T> List<T> emptyList() {
return THEEMPTYLIST;
}
public static final List THEEMPTYLIST = new List() {
public int size() { return 0; }
...
};
不过,emptyList
方法使调用者更方便,因为它支持类型推断:
List<String> noStrings = Collections.EMPTY; // Gives compiler warning due to use of raw types
List<String> noStrings2 = Collections.emptyList(); // No compiler warning, type parameter inferred.
关于java - 具有单个泛型方法的非泛型 Java 接口(interface),仅在左侧具有类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12297110/