Java相当于Javascript原型

时间:2015-06-25 20:30:02

标签: java

在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()方法。

1 个答案:

答案 0 :(得分:2)

星期五,让我们回答这个问题。我不打算深入了解很多细节(这是星期五!)但希望你能发现它有用(在某种程度上)。

您当然知道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就是其中之一)。他们通常支持可选输入并允许动态方法调用。

星期五享受!