如何将方法追加到类型



我有一个名为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 表示字符串类型。现在我在 B 类中有一个名为 length() 的方法。我希望这是可能的。

ClassA_VariableName.length()

然后我将能够得到对象的长度。类 B 类似于函数或特性的集合,可以附加到要附加到的任何类型。

简短的回答是否定的,如果不使用引入声明该方法的新类型(类或接口(,则无法在 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()

在Java中,你不能向类添加方法,这些类的源代码不能像javascript或ruby那样改变。

你可以创建自己的类并从 ArrayList 继承它:

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

最新更新