私の現在のプロジェクトでは、抽象クラスから変数を継承する2つのクラスがあります。類似点の1つは、抽象クラスの拡張子に基づいて、新しいコントローラクラスを作成する必要があることです。これらのクラスにも類似点があり、そのうちの1つは、どのオブジェクトがそれらを構築したかを保存することです。抽象クラスの変数のクラスを変更できます
これらのコントローラクラスの抽象クラスを作成しようとしていますが、それらを作成する抽象クラスの変数を作成しました。ここで問題があるのは、抽象クリエータクラスをコントローラクラスの実装に変更するために、このコントローラクラスの実装が必要なことです。
これは本当に混乱しています。私は例を書いておきます:
これは私の抽象コントローラクラスですから、これを拡張したコントローラクラスの例を書きます。このクラスは、抽象的なGameObjectクラスを拡張するオブジェクトを保存する必要があります。しかし、私はこのクラスを構築した後、 'gameObject'変数にGameObjectの特定の拡張が入っていると確信していますので、その変数だけを使ってこの拡張でできることをしたいと思います。
public class PlayerController extends ObjectController {
int speed = 0;
public PlayerController(Player player, Game gameVersion{
super(player, gameVersion)
}
public void updateSpeed(){
speed = player.getSpeed() // example of a method only the Player class has
}
}
プレーヤ変数をPlayerクラスに常にキャスティングせずに、どうすればよいですか?
public abstract class ObjectController<T extends GameObject> {
protected T gameObject;
// ...
public ObjectController(T object, Game gameVersion) {
// ...
}
}
と
public class PlayerController extends ObjectController<Player> {
// ...
}
T extends GameObject
は、あなたのObjectController
がGameObject
及び代表者の具体的なタイプは、そのサブクラスに使用する決定を拡張するタイプについて何かを「知っている」ことを意味します
ありがとうございました!しかし、コントローラクラスを抽象的なGameObjectクラスに格納すると(GameObjectクラスをControllerクラスに保存しようとしていますが、その逆もあります)、GameObjectの拡張でジェネリックを変更するにはどうすればよいですか?私は今抽象クラスで生の型として保存し、拡張機能でジェネリックを定義しようとするが、それは私にエラーを与える。 – Typhaon
'GameObject'のコントローラーへの参照を保持したいのですが、' GameObject'レベルですか? – Zircon
ええ、ちょっと..私はそれが一番簡単な方法だと思っていましたが、私は提案をすることができます。現時点では、すべてのgameObjectがSetに格納され、各フレームを繰り返し処理し、getController()。nextAction();を呼び出します。 – Typhaon