我能否使用默认方法扩展现有的JDK接口,例如List
,以便为实现它的任何东西添加额外的方法?
如果是这样,在任何地方都有一个简单的例子吗?
答案 0 :(得分:6)
与任何其他编译代码一样,JDK代码无法修改。因此,任何现有类型(List
或其他类型)都不能通过添加方法或任何其他机制来改变其行为。
唯一的选择是只扩展要修改的类(如果它们未声明为final
- 例如,String
无法扩展)并更改其中的功能。显然,任何扩展类也都具有其所有父类的类型,例如,ExtendedList
类也是List
,假设它的声明类似于
public class ExtendedList<E> extends List<E>
{
...
}
您所问的可能是扩展方法的功能,正如上面评论中已经提到的那样,这是Java
不支持的相当酷的功能。其他语言(例如C#
)提供此类支持。
答案 1 :(得分:4)
您可以创建自己的扩展方法来向JDK类添加方法,但不能在Java中添加方法,而是使用其他JVM语言(如Groovy)。
这是一个关于如何添加扩展方法的Groovy教程
http://groovy.codehaus.org/Creating+an+extension+module
基本上,您只需要使用要添加的静态方法创建一个新类。此方法的第一个参数是要添加方法的对象,其他任何参数都是方法中的参数
public class MyExtension{
public static String myMethod(List list, /* other params here*/){
//do stuff
}
}
然后,您需要将模块描述符文件名org.codehaus.groovy.runtime.ExtensionModule
添加到META-INF/services
目录中,并包含以下内容:
moduleName=your-module-name
moduleVersion=your-module-version
extensionClasses=your-extension-full-classname
staticExtensionClasses= other-extension-class-for-static-methods
就是这样
答案 2 :(得分:1)
不,没有办法为您自己无法控制的界面添加新的默认方法。