私はトラックとセダンという2つのクラスを持っています。何らかのアクションが発生すると、TruckクラスのhashMapにセダンを追加します。マップは、セダンが現在トラックの貨物に入っていることを示している。私はトラックとセダンがお互いを知りたくないので、セダンのIDとセダンが追加したいトラックのIDを渡してセダンが呼び出せる方法をCarManagerで作った。その後、CarManagerはセダンがリストに追加されることをTruckに通知します。問題は、CarManagerがTruckに通知する方法と、そのaddSedanメソッドで必要なものがわからないことです。私はCarManagerの中にCarEntitiesのコレクションを持つHashMapを持っています。トラックのaddCarメソッドは、インターフェイスにないのでCarManagerからアクセスできません。すべてのCarEntityがそれを使用するわけではないので、インターフェイスに追加したくありません。誰も助けることができますか?JavaのHashMapでオブジェクトのメソッドを呼び出す
public interface CarEntity {
String getId();
double getSpeed();
void move();
}
public class CarManager {
private HashMap<String, CarEntity> hash = new HashMap<String, CarEntity>();
public void addSedan(String carId, String truckId) {
???
hash.get(truckId).addCarr(carId); //I don't think this will work
}
}
public class Truck implements CarEntity {
private HashMap<String, CarEntity> cargo = new HashMap<String, CarEntity>();
public void addCar(String id, CarEntity ce) {
cargo.put(id,ce);
}
public class Sedan implements CarEntity {
CarManager.addSedan("Car 1", "Truck 5");
}
しかし、私はすべてのCarEntitiesがトラックに必要なときにそれらのメソッドを実装する必要があるという問題にぶつかります – Dan
これらのメソッドの実装は非常に簡単です。 1行のコード。しかし、AbstractCarEntityクラスからデフォルトの実装を継承し、Truckクラスでのみオーバーライドすることができます。 –
しかし、1つのクラスだけがそれを使用する場合、インターフェイスにいくつかのメソッドを持つことは悪い設計ではありませんか? – Dan