如何将方法附加到类型?

时间:2018-01-25 03:28:26

标签: java spring-boot

我有一个名为CountService的类。它有这个方法

public int count()

我想要的是将此函数附加到任何java.util.List变量,它将返回该列表的大小(整数)。我知道该列表有一个size()方法。如果可以将方法附加到类中,我只是测试它。我不知道它到底在哪里。 样品:

java.util.List<String> list;
list.count();

所以即使count不属于java.util.List,我希望在我的代码中可以实现。有什么办法吗?

编辑:

它不仅仅适用于java.util.List。而不是任何类。我们说我有Class AClass B

现在举例来说,A类代表一种String类型。现在我在B类中有一个名为length()的方法。我希望这是可能的。

ClassA_VariableName.length()

然后我就可以获得物体的长度。 B类就像是一系列功能或特征,可以附加到任何附加的类型上。

2 个答案:

答案 0 :(得分:2)

简短的回答是否定的,如果不引入声明该方法的新类型(类或接口),则无法在Java中执行此操作。

您必须延长java.util.List

public interface SuperList extends List {

   default int count() {
      return size();
   }
}

然后你必须引入一个实现该接口的新类(并且可能从现有的JDK列表中继承东西,例如ArrayList)。

但是,如果您不仅限于Java,您可以查看其他JVM语言。例如,Groovy或Kotlin提供了向类添加方法的功能。

以下是Groovy中的一个示例,它使用Expando类将方法添加到列表中。

List list = new ArrayList()

list.metaClass.count() {
    delegate.size()
}

// now call it
list.count()

答案 1 :(得分:0)

在Java中,您不能将方法添加到与javascript或ruby不同的无法更改的源类。

您可以创建自己的类并从ArrayList:

继承它
class MyList extends ArrayList {
    public int count() {
        //...
    }
}