gpt4 book ai didi

java - 不寻常的通用语法 : Arrays. asList(...)

转载 作者:IT老高 更新时间:2023-10-28 20:40:41 24 4
gpt4 key购买 nike

我发现了一个“不寻常”的通用语法,例如:

Arrays.<String>asList(...);
Collections.<String>emptyList();

显然,方法的结果是通用的。这种语法是用于类型检查的吗?一个 Object数组不能是 Arrays.<String>asList(...) 的参数.

最佳答案

<typearg>methodname是显式指定泛型方法的类型参数的语法

当您使用泛型类时,通常必须指定类型参数(例如 String ):

ArrayList<String> list =  new ArrayList<String>();

使用泛型方法,您通常不会传递类型参数:

public static <T> void foo(T param) {   }
...
String s = ...;
MyClass.foo(s);

你会注意到我们没有在哪里明确指定我们想要 String 的代码。 foo 的版本,即没有显式类型参数 <String>就像我们在使用泛型类 ( List<String> ) 时看到的那样指定。

编译器正在使用一些编译器魔法来根据上下文推断泛型类型参数。这是一件很棒的事情,而且非常强大。

但是,有时编译器无法自动推断类型参数:

public static <T> void bar() { T myLocalVar = ...; ...  }
MyClass.bar();

bar 的具体版本是什么?我们是否试图调用,即这个调用的类型参数是什么?好吧,编译器也没有。我们必须显式声明类型参数,就像我们通常在使用泛型类时所做的那样:

MyClass.<String>bar();

另见:


除此之外: 值得一提的是,Java 7 将添加所谓的菱形运算符,以便我们现在也可以让编译器在使用泛型类时推断类型参数:

ArrayList<String> list =  new ArrayList<String>();

变成

ArrayList<String> list =  new ArrayList<>();

What is the point of the diamond operator (<>) in Java 7?

关于java - 不寻常的通用语法 : Arrays. <String>asList(...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4829631/

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