在JavaScript中,很容易修改(甚至完全替换)内置类。只需输入=
并定义一个函数,就可以简单地编写一个方法的名称并将其注入JavaScript的内置类中。然后,该方法可以在该类的每个实例上使用。
例如,我在String
JavaScript内置类中注入了一个方法multiply
,该方法将字符串对象包含给定次数的字符串相乘。
我可以在Java中做类似的事情吗?
我知道我可以扩展一些内置类,并在我的自定义类中定义这个方法。但是,是否有可能像JavaScript一样在内置Java类中注入方法这样在程序中使用该类的任何地方都可以使用这个自定义方法?
这可以在运行时执行。但简单的答案是,你不想那样做。字节码修改是非常脆弱和复杂的。更不用说,如果你直接调用你注入的新方法,你的代码也不会编译,这意味着你必须求助于昂贵的方法,如Reflection。
最好的替代方法是为Strings创建一个具有这个乘法方法的实用程序类。像这样:
public class StringUtil {
public static String multiply(String s1, int i) { ... }
}
对于非final类(即不是String类),您还可以选择扩展类并将您的方法添加到新创建的类中:
public class MyType extends Type {
public static SomeType someMethod() { ... }
}
这将要求您将所有类型的Type
类型替换为MyType
我不完全理解你的例子,但它听起来像String#repeat(int)可能会做同样的你想要实现的。