Java 如何将方法附加到类型?

Java 如何将方法附加到类型?,java,spring-boot,Java,Spring Boot,我有一门课叫CountService。它有这个方法 public int count() 我想要的是将这个函数附加到任何java.util.List变量,它将返回该列表的大小(一个整数)。我知道列表有一个size()方法。我只是想测试一下是否有可能在类中附加一个方法。我不知道它不属于哪里。 样本: 然后我就能得到物体的长度。类B类似于函数或特性的集合,可以附加到它要附加到的任何类型。在Java中,与javascript或ruby不同的是,您不能向类添加源代码无法更改的方法 您可以创建自己的类并

我有一门课叫CountService。它有这个方法

public int count()
我想要的是将这个函数附加到任何
java.util.List
变量,它将返回该列表的大小(一个整数)。我知道列表有一个
size()
方法。我只是想测试一下是否有可能在类中附加一个方法。我不知道它不属于哪里。 样本:


然后我就能得到物体的长度。类B类似于函数或特性的集合,可以附加到它要附加到的任何类型。

在Java中,与javascript或ruby不同的是,您不能向类添加源代码无法更改的方法

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

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

在Java中,与javascript或ruby不同的是,您不能向类中添加方法,这些类的源代码不能更改

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

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

简而言之,答案是否定的,在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中,如果不引入声明方法的新类型(类或接口),就无法实现这一点

您必须扩展
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()


你能提供一份类似的清单吗;a、 计数();count()不属于列表,列表的大小为()。但我只是在尝试这种“附加非归属方法”的东西。对不起,我不太清楚。请编辑您的问题,使其符合要求,否则您将无法获得太多帮助。对不起。对StackOverflow来说是个新鲜事。我没有立即看到编辑选项。你能提供一个类似列表;a、 计数();count()不属于列表,列表的大小为()。但我只是在尝试这种“附加非归属方法”的东西。对不起,我不太清楚。请编辑您的问题,使其符合要求,否则您将无法获得太多帮助。对不起。对StackOverflow来说是个新鲜事。我没有立即看到编辑选项。他想要它用于任何
java.util.List
而不仅仅是一个特定的列表类型。我回答说这是不可能的,为什么是这个注释?他想要它用于任何
java.util.List
而不仅仅是一个特定的列表类型。我回答说这是不可能的,为什么是这个注释?哦,好的。我试试这个。扩展多个类是一种好做法吗?在Java中,只能从一个类进行扩展。但是一个接口可以扩展多个其他接口。我想在Groovy上试试这个例子。我是否可以将您的示例
Class A
,然后将其作为
list.count()
调用到
Class B
?或者您是否可以推荐一种合适的Java设计模式?不,就是不要用Java做这样的事情。使用一种擅长于此的JVM语言。我试试这个。扩展多个类是一种好做法吗?在Java中,只能从一个类进行扩展。但是一个接口可以扩展多个其他接口。我想在Groovy上试试这个例子。我是否可以将您的示例
Class A
,然后将其作为
list.count()
调用到
Class B
?或者您是否可以推荐一种合适的Java设计模式?不,就是不要用Java做这样的事情。使用擅长这一点的JVM语言