我希望在对象列表中实现一个功能,因为我会在c#中使用扩展方法。
就像这样:
List<DataObject> list;
// ... List initialization.
list.getData(id);
在Java中怎么做呢?
我希望在对象列表中实现一个功能,因为我会在c#中使用扩展方法。
就像这样:
List<DataObject> list;
// ... List initialization.
list.getData(id);
在Java中怎么做呢?
当前回答
Project Lombok提供了一个注释@ExtensionMethod,可用于实现您所要求的功能。
其他回答
另一个选择是使用来自google-guava库的ForwardingXXX类。
Project Lombok提供了一个注释@ExtensionMethod,可用于实现您所要求的功能。
从技术上讲,c#扩展在Java中没有对等的扩展。但是如果你确实想要实现这样的函数以获得更清晰的代码和可维护性,你必须使用Manifold框架。
package extensions.java.lang.String;
import manifold.ext.api.*;
@Extension
public class MyStringExtension {
public static void print(@This String thiz) {
System.out.println(thiz);
}
@Extension
public static String lineSeparator() {
return System.lineSeparator();
}
}
看起来防御方法(即默认方法)有可能加入Java 8。然而,据我所知,它们只允许接口的作者追溯性地扩展它,而不允许任意用户。
防御方法+接口注入将能够完全实现c#风格的扩展方法,但是AFAICS,接口注入甚至还没有出现在Java 8的路线图中。
Java 8现在支持默认方法,它类似于c#的扩展方法。