如何为java.lang中的现有类定义java方法?

如何为java.lang中的现有类定义java方法?,java,Java,我想为String类编写一个自定义方法,以便可以像下面那样调用它: String s = "hello world"; s.myMethod(); 它们是否是实现这一目标的具体方式 如果不是的话,我会做下面的事情,但我仍然想知道 myMethod(s); 这是无法做到的,因为您无法向Java中的现有类添加方法 更有趣的是,Java中的类String是一个final类,不能子类化 您可能会感兴趣,因为您所描述的东西被称为monkeypatching,这在比Java更具动态性的语言中很常见。其中

我想为String类编写一个自定义方法,以便可以像下面那样调用它:

String s = "hello world";
s.myMethod();
它们是否是实现这一目标的具体方式

如果不是的话,我会做下面的事情,但我仍然想知道

myMethod(s);

这是无法做到的,因为您无法向Java中的现有类添加方法

更有趣的是,Java中的类
String
是一个
final
类,不能子类化

您可能会感兴趣,因为您所描述的东西被称为monkeypatching,这在比Java更具动态性的语言中很常见。其中一个答案链接到cglib,cglib是对字节码有魔力的几个库之一。只要足够努力,违反基本原则,你可以做很多事情,包括


更新:它的答案似乎解决了你的确切问题。有些答案很有创意。

这是无法做到的,因为您无法向Java中现有的类添加方法

更有趣的是,Java中的类
String
是一个
final
类,不能子类化

您可能会感兴趣,因为您所描述的东西被称为monkeypatching,这在比Java更具动态性的语言中很常见。其中一个答案链接到cglib,cglib是对字节码有魔力的几个库之一。只要足够努力,违反基本原则,你可以做很多事情,包括


更新:它的答案似乎解决了你的确切问题。有些答案很有创意。

这是不可能的。java中最好的方法是创建您自己的从字符串扩展的类,并在其中编写您的方法。这样,你的类就像字符串类,但包括你的东西


但不可能,因为字符串是最终的。因此,创建一个只包含字符串对象的类,并将引用该字符串的方法写入该类。因此,您可以通过类中的string对象调用string方法,并通过类直接调用方法,这是不可能的。java中最好的方法是创建您自己的从字符串扩展的类,并在其中编写您的方法。这样,你的类就像字符串类,但包括你的东西



但不可能,因为字符串是最终的。因此,创建一个只包含字符串对象的类,并将引用该字符串的方法写入该类。因此,您可以通过类中的string对象调用string方法,并通过类直接调用方法

您的用例是什么,您是否只是为了方便而这样做?准确地说。我认为它会比myMethod(line.toLowerCase(),myString)更好。你应该研究Kotlin,它允许扩展方法,并且与Java非常兼容。你的用例是什么,你是为了方便才这么做的吗?没错。我认为它会比myMethod(line.toLowerCase(),myString)更好。您应该研究Kotlin,它允许扩展方法,并且与Java非常兼容。谢谢您提供的信息。一个快速澄清的问题:从您的链接上看,猴子补丁似乎涉及替换类已经存在的方法。添加全新的方法(不替换旧方法)也被称为猴子修补术吗?确实,很难准确地确定“monkeypatching”的确切含义,但与所有单词一样,它的含义可能会随着时间的推移而有所变化。有些人可能会将该术语限制为仅替换动态编程语言中的方法,而其他人可能会包括对类的任何类型的运行时修改。在这个术语的更广泛的上下文中(我碰巧喜欢),是的,monkeypatching确实包括向类添加方法。不过,这与子类化不同,子类化是向Java类“添加方法”的方式。感谢您提供的信息。一个快速澄清的问题:从您的链接上看,猴子补丁似乎涉及替换类已经存在的方法。添加全新的方法(不替换旧方法)也被称为猴子修补术吗?确实,很难准确地确定“monkeypatching”的确切含义,但与所有单词一样,它的含义可能会随着时间的推移而有所变化。有些人可能会将该术语限制为仅替换动态编程语言中的方法,而其他人可能会包括对类的任何类型的运行时修改。在这个术语的更广泛的上下文中(我碰巧喜欢),是的,monkeypatching确实包括向类添加方法。但这与子类化不同,子类化是向Java类“添加方法”的方式。在过去30分钟里,我在多个地方读到,类不能从字符串扩展,因为字符串是final?True。对不起,我编辑了答案。检查是否清楚,让我知道清楚。上面答案中的链接也提到了同样的事情。酷!!对不起。我意识到字符串是最终的。在过去的30分钟里,我在多个地方读到,一个类不能从字符串扩展,因为字符串是最终的?真的。对不起,我编辑了答案。检查是否清楚,让我知道清楚。上面答案中的链接也提到了同样的事情。酷!!对不起。我意识到字符串是最终的