でオブジェクト型を知らなくてもメソッドを適用します。は、私はJavaで2つのクラスを持っているのjava
public class Movie {
public String title;
public Movie(String t) {
this.title = t;
}
public String getAuthor(){
return title;
}
}
私はこのようなリスト内のすべてのオブジェクトを置くしようとしている:
ArrayList myList = new ArrayList();
Book book = new Book("William");
Movie movie = new Movie("Titanic");
myList.add(book);
myList.add(movie);
その後、私はジョンが書いた本(または他の特定のタイトル)の数を数えたいと思います。 Javaはそれは私が句は、オブジェクト型ごとに時間をチェックした場合に使用することができるだろう
int counter = 0;
for (int i =0;i<myList.size();i++){
if (myList.get(i).getAuthor().equals("John")){
counter +=1;
}
あるオブジェクトの種類を知らないので、私はGETAUTHOR()またはたgetTitle()メソッドを適用することはできません、異なるオブジェクトに異なるメソッドを適用することができますが、実用的なケースでは20以上のクラスがあり、コードを非常に長く保守しやすいので、これは実行可能ではありません。
誰かがこれに対する解決策を提案できますか?前もって感謝します!
異なるリスト( 'Book'や' Movie'のような、 'Object'以外に共通のスーパータイプを持たないもの)を同じリストに入れるのは悪い習慣です。共通(抽象的な)スーパークラスまたはインタフェースを作成できます。 – Jesper
また、ジェネリックスなしで 'ArrayList'のような生の型を使わないでください。 [未加工のタイプとは何ですか?なぜ使用しないのですか?](https://stackoverflow.com/questions/2770321/what-is-a-raw-type-and-why-shouldnt-we-use-それ) – Jesper
なぜ同じリストに全く異なるもの(書籍とムービー)を入れたいのですか?それらがあなたのために似ている場合は、それらを呼び出す必要があるメソッドを提供する同じインターフェイスを与える必要があります。もちろん反射を使うこともできますが、これは私がこの場合に示唆するものではありません。 –