在JavaScript中,您可以执行此操作。
String.prototype.removeNumericalCharacters = function(){
...code...
}
要么
Number.prototype.addTwo = function(){
...code...
}
var a = 5;
a.addTwo();
//a is now 7
有没有办法在Java中做类似的事情? (我并不是说实际的功能,仅以此为例)
Java的一个例子是
int a = 5;
a.addTwo();
//A is now 7
我的问题是如何定义.addTwo()方法。
最佳答案
今天是星期五,所以让我们回答这个问题。我不会详细介绍(今天是星期五!),但希望您会发现它很有用(一定程度上)。
您当然知道Java对象没有原型。如果要向Java类添加字段或方法,则有两个选择。您可以扩展现有的类并向其添加方法/字段,如下所示:
public class A {
}
public class B extends A {
int addTwo () {...};
}
但是,这并没有改变父类。在示例中,类
A
的对象仍然没有方法addTwo
。第二种方法是动态更改类(可以使用
javassist
之类的东西)和方法/字段。一切都很好,但是要使用这些新的方法/字段,您必须使用反射。 Java是强类型的,需要在编译期间了解类的可用方法和字段。最终,事情变得很艰难-在您的实例
int
中,原始类型被“硬连接”到JVM中并且无法更改。所以你的例子int a = 5;
a.addTwo();
在Java中是不可能的。在JVM上使用动态语言会带来更多的运气(Groovy是其中之一)。它们通常支持可选的类型输入,并允许动态方法调用。
所以享受星期五!
关于java - Java相当于Javascript原型(prototype),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31060203/