扩展现有JDK接口的默认方法

时间:2014-06-20 18:20:12

标签: java java-8

我能否使用默认方法扩展现有的JDK接口,例如List,以便为实现它的任何东西添加额外的方法?

如果是这样,在任何地方都有一个简单的例子吗?

3 个答案:

答案 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)

不,没有办法为您自己无法控制的界面添加新的默认方法。