私はJavaでインベントリプログラムに取り組んでいます。DefaultListModel
インベントリ内の各オブジェクトを、場所ごとに関連するクラスタイプとして保存していJList
ます。たとえば、「Mulan」という動画と「Dorm」という場所に「Ball」という一般的なものがある場合、「Dorm」という場所ではJList
「Mulan」がインスタンスにvideo
なり、「Ball」がインスタンスになります。のthing
。すべてのクラスはThingから継承されます。
私はこのようなことをしようとしています...
Dorm.getSelectedValue().methodInVideoOrThing;
...しかし、私がそれを試してみると、それは言います:
error: cannot find symbol
Dorm.getSelectedValue().methodInVideoOrThing();
^
symbol: method methodInVideoOrThing()
location: class Object
DefaultListModelは各オブジェクトをジェネリックobject
変数に格納するため、作成したクラスのメソッドにアクセスできません。私はこれを試しました...
class c = Dorm.getSelectedValue().getClass();
c A = (c) Dorm.getSelectedValue();
A.methodInC;
...しかし、次のエラーが返されました。
error: cannot find symbol
c A = (c) Dorm.getSelectedValue();
^
symbol: class c
error: cannot find symbol
c A = (c) Dorm.getSelectedValue();
^
2 errors
symbol: class c
isInstanceOf
ケースバイケースでダウンキャストを使用してすべてのクラスを循環できることはわかっていますが、それは非常に面倒です。さらに、私がするとき...
System.out.println(Dorm.getSelectedValue().getClass());
class video
...「Ball」または「Mulan」のどちらが選択されているかに応じて、またはのいずれかが返されるclass thing
ため、Javaはそれがどのクラスであるかを認識していることがわかります。
それで、サブクラスがオブジェクト型の変数として格納されているときに、ダウンキャストせずにサブクラスのメソッドにアクセスできる方法はありますか?または、ダウンキャストでこれを行う方法はありますか?私はそれを間違っていますか?