具有静态generics的类型安全,通用,空集合

我尽可能返回空集合与null。 我使用java.util.Collections在两种方法之间切换:

return Collections.EMPTY_LIST; return Collections.emptyList(); 

其中emptyList()应该是类型安全的。 但我最近发现:

 return Collections. emptyList(); return Collections. singletonList(new ComplexObject()); 

等等

我在Eclipse Package Explorer中看到了这个方法:

  () : void 

但我不知道在源代码(1.5)中是如何完成的。 怎么这个神奇的tomfoolerie发生了!

编辑:如何完成静态通用类型?

编辑:如何完成静态通用类型?

http://www.docjar.com/html/api/java/util/Collections.java.html

 public class Collections { ... public static final List EMPTY_LIST = new EmptyList(); ... public static final  List emptyList() { return (List) EMPTY_LIST; } ... } 

如果您感到好奇,可以看到实现EmptyList类的链接,但对于您的问题,它并不重要。

 return Collections. emptyList(); 

使用它将消除Eclipse关于非generics集合的警告。

话虽如此,由于空列表是不可变的并且Java在编译时擦除generics类型,因此类型化的空列表将在function上与无类型的空列表相同。

是静态初始化程序块。 它是一段代码,只执行一次(当加载类时)。

所以,而不是写作

 class A { static int x = 5; } 

人们可以写:

 class A { static int x; static { // static initializer starts x = 5; } } 

这两个类是等价的。 在静态初始化块内部,可以放置任意代码,从而使用复杂计算的结果初始化静态字段。

是编译期间收集类初始化代码的方法的名称。 (也就是说, static {}块内的所有代码,以及源代码顺序中静态成员的初始化器。)

它与方法调用中的显式类型参数无关。