小编Ale*_*hin的帖子

调用泛型方法时未指定的类型参数

想象一下,我们有以下泛型类:

public class GenericClass<U> {
    private U value;

    public GenericClass(U value) {
        this.value = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

和其他一些类MyClass中的以下泛型方法:

public <T extends BT, BT> void genericMethod(T arg) {
    Object genericClass = new GenericClass<BT>(arg);
}
Run Code Online (Sandbox Code Playgroud)

如果我们打电话,BT类型参数将获得哪个值

genericMethod("text");
Run Code Online (Sandbox Code Playgroud)

一些说明:

上面的代码编译没有错误或警告,这对我来说似乎很奇怪.反编译(通过IntelliJ IDEA 2016)显示以下代码:

public <T extends BT, BT> void genericMethod(T arg) {
    new MyClass.GenericClass(arg);
}
Run Code Online (Sandbox Code Playgroud)

请注意new GenericClass<BT>(arg)并不相同,new GenericClass(arg)因为后者等同于new GenericClass<T>(arg)(类型推导),虽然T extends BT这些是不同的类型,并且GenericClass可能具有内部逻辑,其中确切的类型名称起着重要作用(例如,用作字符串键)一些地图等).所以对我来说奇怪的是,为什么编译器静默使用类型推导而不是产生一些警告(或者甚至是错误),指出没有指定BT类型参数.也许我错过了什么.关于Java中泛型的重要性,但......

java generics

6
推荐指数
1
解决办法
563
查看次数

标签 统计

generics ×1

java ×1