问题
我希望在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
,可用于实现你要求的功能。