在本例中,type inference按预期工作,T type parameter同时处理IntegerString:

public class A {
    public static <T> void func(T obj1, T obj2) {}
    public static void main(String[] args) {
        A.func(1, "One");
    }
}

然而,这似乎不适用于以下示例,因为出现了compilation error:

class Test<T> {
    private T object;
    public Test(T object) {
        this.object = object;
    }
}

public class A {
    public static <T> void func(Test<T> one, Test<T> two) {}
    public static void main(String[] args) {
        Test<Integer> one = new Test<>(1);
        Test<String> two = new Test<>("Two");
        A.func(one, two);  //compilation error
        //A.<Object>func(one, two);
    }
}

尽管(for example) Test<Object>可以同时处理Test<Integer>Test<String>,但T类型参数不是inferred.这一切为什么要发生?

推荐答案

func要求传递给它的两个Test个实例都具有same类型(名为T),但onetwo具有不同的类型.

如果为Func类型使用不同的名称,应该会更清楚:

public static <X> void func(Test<X> one, Test<X> two) {}

X的类型在调用点确定.

仅仅使用与Test中使用的相同的名称T没有任何效果.

Java相关问答推荐

强制Mockito返回null而不是emtpy list

如何粘合(合并)文件Lucene?

填写文本字段后锁定PDF

Hibernate 6支持Joda DateTime吗?

在springboot 3中,当我调用api endpoint时,会出现404

如何使用值中包含与号的查询参数创建一个java.net.URI

在Java 17中使用两个十进制数字分析时间时出错,但在Java 8中成功

如何在EXCEL单元格中添加形状和文本

SpringBoot Kafka自动配置-适用于SASL_PLAYTEXT的SSLBundle 包,带SCRAM-SHA-512

GetChildren().emoveAll()不会删除 node

内存和硬盘中的Zip不同,这会导致下载后的Zip损坏

当b是一个字节并且在Java中值为-1时,为什么b>;>;>;1总是等于-1?

Spring Framework6.1中引入的新RestClient是否有适合于测试的变体,就像RestTemplate和TestRestTemplate一样?

在JDK Flight Recorder中只记录单个线程

从泛型枚举创建EnumMap

Spring Validator批注不起作用

如何通过Java java.lang.Foreign API访问本机字节数组

无法使用Open WebStart Java 8运行jnlp

谷歌应用引擎本地服务器赢得';t在eclipse上运行

如何在Java中正确实现填字游戏求解器