在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/

10-11 10:32