假设您有一个带有不推荐使用的构造函数的参数化类,以及一个调用此构造函数的User
类.在下面的示例中,使用菱形运算符的javac(11.0.11版)不会生成弃用警告:
class DepTester<T> {
T t;
@Deprecated
public DepTester(T t) {
this.t = t;
}
}
class User {
DepTester<String> tester = new DepTester<>("This does not produce a warning!");
}
但是,如果构造函数调用中有显式类型参数,则会发出警告:
class User {
DepTester<String> tester = new DepTester<String>("This produces a warning.");
}
[WARNING] DepTester.java:[17,40] DepTester(T) in com.foo.DepTester has been deprecated
通常不包括显式类型参数,IntelliJ inspection还警告:
显式类型参数字符串可以替换为<>;
我在Java language spec米中找不到对这种行为的解释.我try 使用javac 17,它在两种情况下都会产生警告,那么这是javac 11中的bug吗?
编辑:我向Oracle提交的错误报告在Java错误数据库中分配了一个ID:JDK-8281107