我返回空集合与空的,只要有可能。我使用java.util.Collections在两种方法之间切换:
return Collections.EMPTY_LIST;
return Collections.emptyList();
其中emptyList()
应该是类型安全的。但我最近发现:
return Collections.<ComplexObject> emptyList();
return Collections.<ComplexObject> singletonList(new ComplexObject());
等等
我在Eclipse Package Explorer中看到了这个方法:
<clinit> () : void
但我不知道这是如何在源代码中完成的(1.5).这个神奇的愚蠢是如何发生的!!
EDIT:静态泛型类型是如何实现的?
5条答案
按热度按时间oprakyz71#
使用此方法可以消除Eclipse中关于非泛型集合的警告。
话虽如此,类型化的空列表在功能上与非类型化的空列表相同,因为空列表是不可变的,Java在编译时擦除泛型类型。
yqyhoc1h2#
EDIT:静态泛型类型是如何实现的?
http://www.docjar.com/html/api/java/util/Collections.java.html
如果您感兴趣,可以查看EmptyList类实现的链接,但对于您的问题,这并不重要。
voase2hg3#
<clinit>
是静态初始化器块。它是一个代码块,只执行一次(当类被加载时)。所以,与其写
可以这样写:
这两个类是等价的。在静态初始化器块中,可以放置任意代码,从而使用复杂计算的结果初始化静态字段。
mnemlml84#
<clinit>
是编译期间将类初始化代码收集到的方法的名称。(也就是说,static {}
块中的所有代码,以及静态成员的初始化器,按源代码顺序排列。)它与方法调用中的显式类型参数无关。
agxfikkp5#
对于那些正在寻找类似解决方案的人,但对于更当前的时间(2023年4月),人们已经开始使用
List.of()
作为Collections.emptyList()
的简洁替代品。..中的方法的前缀相同
Collections.<ComplexObject>emptyList();
使用相同的方法前缀模式:
List.<ComplexObject>of();