背景コンテキスト:
私は、複雑な3Dモデルを表し、非ジェネリッククラスを持っています。私はまた、抽象クラスからすべての継承は、すべての子クラスが同じフィールドと機能を継承していることを、標準的な3D幾何学的なクラス(球、立方体、直方体)のシリーズを持っています。各クラスのニーズは抽象クラスから継承していない複雑な3Dモデルクラス、との仕事にできるようにするので(それは同じフィールド/機能の必要性を持っていません)。
だから私は、複雑なモデルクラスと子クラスのすべてを使用したいです。ユーザーが必要なときに、これは、ユーザが必要とする限り、このクラスにフィールドとして保存されますので、具体的には、一人の子供のクラスは、複雑なモデルで作業することができます。私は一般的な機能を使用すると、3Dは、同じフィールド/機能を持つクラスをメッシュすべての単純に適用することができると思ったので、複雑なクラスでは、これらのオブジェクトからのアクセスフィールドや機能にする必要があります。
質問
のは、私は、そのクラスのフィールドは、ジェネリック型になりたい場所を、私は非ジェネリッククラスがあるとしましょう。私は、非ジェネリッククラスは、ユーザーが作成したさまざまな種類のを扱うことができるようにしたいです。
私はこのように、一般的なフィールドを設定することができます非ジェネリッククラス内の一般的な方法をしたいです:
void <T> setGenericObject(T object){
genericField = object;
}
しかし、私は適切に一般的なフィールドを宣言するのか分かりません。(他のオブジェクトを操作すると、そのクラスの機能のほんの一部であるので)私はちょうどそれの一つの小さなフィールドのための汎用的なクラスを作成する必要はありません。どのように私はきちんと仕事に、このために私のクラス内でこのgenericField変数を宣言するのでしょうか?
あなたは型であるフィールドを宣言することができObject
、それはパラメータに等しいとセット。Javaですべてのクラスは拡張Object
あなたがジェネリック型としてそれを使用できるように、クラスを:
private Object genericObject;
public void setGenericObject(Object object) {
this.genericObject = object;
}
あなたは、その後に属していないメソッドを呼び出したい場合はその後Object
、あなたはキャストでそうすることができます。
public void executeMethod() {
((ClassName) this.genericObject).methodName();
}
点に注意してClassCastException
いるが、S。