java - 具有单个泛型方法的非泛型 Java 接口(interface),仅在左侧具有类型参数

标签 java generics

我最近遇到了以下模式的实例:

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/

相关文章:

java - Picocli - java.lang.NumberFormatException

java - 使用 BufferedReader 读取所有行

java - Gradle + Dropwizard + Shadow -> 无法找到或加载主类

java - 这个Java语法是什么意思? (`Class<? extends ContactAccessor> clazz`)

java - 如何存储数据结构匹配.proto

java - ArrayList<MyClass> 问题

java - Java 中 String 列表和 String[] 列表,或 T 列表和 T[] 列表的通用方法

Java 类泛型和方法泛型冲突

Java 使用泛型创建新类

java - static <T extends Number & Comparable<? super 号>>