2012-03-01 65 views
2

可以說我有一個方法如何有動態方法參數

public abstract void doMath(Holder h);

但我希望用戶能夠調整在被傳遞的類。像這樣

public abstract void doMath(ClassOfPersonalChoice h);

我該如何去做這件事。

謝謝您的時間和精力。

PS:類被傳遞,包含了一些變數。 即。

class ClassofPersonalChoice{ 
    double hue = 0; 
int R = 240; 
int G = 10; 
int B = 180; 
} 
+0

你應該傳遞給了梅索德對象做什麼? – nist 2012-03-01 18:22:01

+0

爲什麼你不能使用'interface MyDoMathInterface'?如果你能提供您所想要達到的目的更多的數據 - 你可能會得到更好的答案...傳遞 – amit 2012-03-01 18:22:36

+0

的對象是包含了一些靜態變量 – bluejamesbond 2012-03-01 18:24:19

回答

1

如果你說

public abstract void doMath(Object h); 

那麼用戶可以執行任何他想要的。

先進的理念:使用泛型/類型參數:

public abstract class MathClass<T> { 

    public abstract void doMath(T holder); 

} 

public class IntegerMathClass extends MathClass<ClassOfPersonalChoice> { 

    @Override 
    public void doMath(ClassOfPersonalChoice holder) { 
     // do something with the value 
    } 

} 
+0

我只是希望刪除後澆鑄 – bluejamesbond 2012-03-01 18:26:37

+0

的進步例如避免鑄造的問題! – 2012-03-01 18:28:45

+0

你能解釋一下MathClass 是什麼目的嗎? – bluejamesbond 2012-03-01 18:28:56

2

如果您聲明參數類型爲Object,那麼您將能夠傳遞任何內容。但是你無法做任何事情,因爲你不知道它是什麼類型。這就是靜態類型語言的工作方式。

理想情況下,你應該聲明的說法是SomeInterface類型,你傳遞的所有對象應該是實現該接口的類的實例。這樣你就會知道你可以在對象上做什麼操作,但是你不需要知道它們的確切類。

+0

關於* *任何事情,甚至是'int'?你應該明確地提到它不適合原語... – amit 2012-03-01 18:24:14

+0

是的,即使:)這一個int將autoboxed成'Integer' – Bozho 2012-03-01 18:26:24

+0

而是一個'int'不是'Integer',只爲將autoboxed Java5的+ [這是一個合理的假設] – amit 2012-03-01 18:28:24