Java 泛型:编译器的问题是什么? (“没有唯一的最大实例”)

2024-01-07

我有以下方法:

public <T> T fromJson( Reader jsonData, Class<T> clazz ) {
    return fromJson( jsonData, (Type)clazz );
}

public <T> T fromJson( Reader jsonData, Type clazz ) {
    ...
}

编译器对第一种方法的说法是:

 type parameters of <T>T cannot be determined;
 no unique maximal instance exists for type variable T
 with upper bounds T,java.lang.Object

 return fromJson( jsonData, (Type)clazz );
                ^

问题是什么?


问题在于第二种方法的定义:

public <T> T fromJson( Reader jsonData, Type clazz ) {

编译器无法判断什么类型T可能有。你必须返回Object在这里,因为你不能使用Type<T> clazz (Type不支持泛型)。

这导致演员阵容(T)在第一种方法中会引起警告。要消除该警告,您有两种选择:

  1. 告诉编译器类型。使用这个(奇数)语法:

    this.<T>fromJson( jsonData, (Type)clazz );
    

    请注意,您需要this在这里因为<T>fromJson()单独是非法语法。

  2. 使用注释@SuppressWarnings("unchecked").

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 泛型:编译器的问题是什么? (“没有唯一的最大实例”) 的相关文章

随机推荐