私の背中のソリッドなC++では、いくつかのJavaの概念が100%明確ではありません。YAJGCQもう1つのJavaジェネリックスとコレクションQ
List<SomeInterface> list = new ArrayList<SomeImplementation>;
これは100%の明確なニーズ説明なしである -
interface Drivable {...}
class Car implements Drivable {...}
class Bike implements Drivable {...}
class Skateboard implements Drivable {...}
class MyGarage{
List<Driveable> myRides;
public void addRides(List<Driveable> rideList){...}
がList<Car>
で呼び出すことはできません...しかし、それは結果を持っています。
public void addCars(List<Car> carList){
myRides.addAll(new List<Driveable>(carList));
Q1:しかし、私はによりmyRidesに車を追加することができ、これは良いアイデアですか?
私は本当に最初の機能が好きです。 C++ const&
に対応してをコピーすると、のmyListに入ってくるcarListがコピーされます。私はcarListが違法なアクセスから保護されていると考えています。ファンクションの引数としてfinal
を追加したいとの私の希望は打ち砕かれました。
Q2:完全に呼び出し可能なaddRides(List<Driveable> rideList)
を動作させる方法はありますか?
法的には、法的に過負荷です(List<Car> List<Bike> etc
)。
はい、別の機能を追加することでaddBikes() addCars etc
を追加することもできますし、それぞれの呼び出しでnew List<Drivable>
を行うこともできます。しかし、私はより洗練された何かを望んでいます。
質問3:何か提案がありますか?
ありがとうございます! アダム
+1を必要とするのと同じ理由です。 – Lukasz
PECS(プロデュース: 'extend'; Consumes:' super')頭字語は、必ず暗記する価値があります。それはジェネリックスを取る関数を作るたびに従うべきルールです。 http://stackoverflow.com/questions/2723397/java-generics-what-is-pecs –