Java相当于C#扩展方法

问题

我希望在C#中使用扩展方法实现对象列表中的功能。

像这样的东西:

List<DataObject> list;
// ... List initialization.
list.getData(id);

我如何用Java做到这一点?


#1 热门回答(152 赞)

Java不支持扩展方法。

相反,你可以创建常规静态方法,或编写自己的类。


#2 热门回答(36 赞)

扩展方法不仅仅是静态方法,而不仅仅是方便的语法糖,实际上它们是非常强大的工具。主要的是能够根据不同的泛型参数实例化覆盖不同的方法。这类似于Haskell的类型类,事实上,看起来它们在C#中支持C#的Monads(即LINQ)。即使删除LINQ语法,我仍然不知道在Java中实现类似接口的任何方法。

我认为不可能在Java中实现它们,因为Java的泛型参数的类型擦除语义。


#3 热门回答(11 赞)

Project Lombok提供了一个注释@ExtensionMethod,可用于实现你要求的功能。