gpt4 book ai didi

java - new 之后的构造函数调用中类型参数的目的是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:52:04 25 4
gpt4 key购买 nike

在 Java 规范 ( http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.9 ) 中,new 具有以下形式:

ClassInstanceCreationExpression ::=
| new TypeArguments_opt TypeDeclSpecifier TypeArgumentsOrDiamond_opt
( ArgumentListopt ) ClassBodyopt
| Primary . new TypeArguments_opt Identifier TypeArgumentsOrDiamond_opt
( ArgumentListopt ) ClassBodyopt

new 之后的第一个可选类型参数列表的目的是什么?我无法从我阅读的第 15.9 节中找到它(所有对类型参数列表的引用似乎都是在类型/标识符之后引用列表)。在标准 Java 编译器上测试随机位会产生令人困惑的结果:

public class Foo<T> { }
// ...
Foo<Integer> t1 = new <Integer> Foo<Integer>(); // works
Foo<Integer> t2 = new <Integer> Foo(); // works -- unchecked warning missing the type arg after Foo
Foo<Integer> t3 = new <Boolean> Foo<Integer>(); // works
Foo<Integer> t4 = new <Float, Boolean> Foo<Integer>(); // works
Foo<Integer> t5 = new <NotDefined> Foo<Integer>(); // fails -- NotDefined is undefined

在这些简单的示例中,尽管第一个参数列表解析并检查其参数的有效性,但它似乎并没有做任何有意义的事情。

最佳答案

构造函数也可以声明类型参数

public class Main {     
public static class Foo<T> {
public <E> Foo(T object, E object2) {

}
}
public static void main(String[] args) throws Exception {
Foo<Integer> foo = new <String> Foo<Integer>(1, "hello");
}
}

这就是 <String> 的内容在构造函数调用之前是 for。它是构造函数的类型参数。

以下内容

Foo<Integer> foo = new <String> Foo<Integer>(1, new Object());

失败

The parameterized constructor Foo(Integer, String) of type Main.Foo is not applicable for the arguments (Integer, Object)

在你的最后

Foo<Integer> t5 = new <NotDefined> Foo<Integer>();  // fails -- NotDefined is undefined

NotDefined只是不是在编译期间找到的类型。如果是,它只会给你一个警告,它是 unused .

关于java - new 之后的构造函数调用中类型参数的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18688882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com