2012-03-01 10 views
2

は、私が法パラメータ

public abstract void doMath(Holder h);

を持っている。しかし、私はクラスの中で渡されるを調整し、ユーザがにできるようにしたいとしましょう。そのよう

public abstract void doMath(ClassOfPersonalChoice h);

のように

どうすればそれをやりますか?

ありがとうございました。

PS:渡されるクラスには一連の変数が含まれています。 すなわちあなたがタイプObjectであると引数を宣言した場合

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

あなたはMethodeのに渡されたオブジェクトに何をすべき? – nist

+0

なぜ 'interface MyDoMathInterface'を使用できませんか?あなたが達成しようとしているものに関するより多くのデータを提供できるなら、おそらくもっと良い答えを得るでしょう... – amit

+0

渡されるオブジェクトには、何かについての静的変数 – bluejamesbond

答えて

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

+0

先進的な例はキャスティングを避ける! –

+0

あなたはクラスMathClass の目的は何ですか? – bluejamesbond

2

、あなたは何を渡すことができると思います。しかし、どんなタイプなのか分からないので、あなたはそれで何もできません。これが静的型言語の仕組みです。

引数は、型がSomeInterfaceであることを理想的に宣言し、渡すすべてのオブジェクトはそのインターフェイスを実装するクラスのインスタンスである必要があります。そうすれば、オブジェクトに対してどのような操作を行うことができるかを知ることができますが、正確なクラスを知る必要はありません。

+0

が含まれています。あなたは明示的にそれがプリミティブに合っていないと言わなければなりません... – amit

+0

はい、さらにint :)それは 'Integer'に自動化されます。 – Bozho

+0

' int'は 'Integer'ではなく、オートボックスjava5 + [これは合理的な仮定です] – amit