2015-06-25 53 views
0

在JavaScript中,您可以執行此操作。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()方法。

+2

簡答題:沒有。如果只有你使用C#代替:) – Jashaszun

+0

可能的重複:http://stackoverflow.com/questions/11553815/is-it-possible-to-simulate-javascript-style-prototypes-in-java – Gibron

+0

@GibronKury我已經看到那。它沒有回答我的問題 –

回答

2

這是星期五,讓我們回答這個問題。我不打算深入細節(這是星期五!),但希望你會發現這有用(在某種程度上)。

你當然知道Java對象沒有原型。如果你想添加一個字段或方法到Java類,你有兩個選擇。您可以擴展現有的類,並像這樣添加方法/字段:

public class A { 
} 

public class B extends A { 
    int addTwo() {...}; 
} 

但是,這不會改變父類。該示例中類A的對象仍然沒有方法addTwo

第二種方法是動態更改類(您可以使用諸如javassist之類的東西)和方法/字段。這一切都很好,但使用這些新的methids/fields你必須使用反射。 Java是強類型的,需要在編譯期間瞭解類的可用方法和字段。

最後,當事情變得非常粗糙時 - 在您的實例int中,原始類型在JVM中「硬連線」,無法更改。所以你的例子

int a = 5; 
a.addTwo(); 

在Java中是不可能的。 JVM上的動態語言會帶來更多運氣(Groovy就是其中之一)。他們通常支持可選的輸入並允許動態方法調用。

所以享受星期五!