前提・実現したいこと
javaで自作のインタフェース型で定義したArrayListを作り、インタフェースを実装したクラスのオブジェクトをArrayListに追加した状態から
インタフェースに定義されていないgetメソッドを使って個別のクラスが持つフィールドの値をgetしたいのですが良い方法が思いつきません。
現状自分が思いつく限りでは、インタフェースに文字列を返すメソッドを用意して、そのクラスの持つフィールドを全て区切り文字を入れながら文字列に変換して文字列として返し、受け取った側で入手した文字列を区切り文字を見て解釈するような方法か
インタフェースを実装するすべてのクラスには共通しないメソッドも定義して、共通しないクラスではそのメソッドは呼び出さないようにするといったやってはいけなさそうな方法しか思い浮かびません。あとはフィールドをpublicに設定するとか…
もっと良い方法があれば教えていただきたいです。
また、そもそもArrayListを使うのが間違いだという場合には、他に、ある属性(サンプルならCustomer)の物をまとめて管理したい場合に、何か方法があれば教えていただきたいです。
発生している問題・エラーメッセージ
Customerインタフェースにはメソッドが定義されていないので当然怒られました
Test.java:50: エラー: シンボルを見つけられません
customerlist.get(2).getVipNum();
^
シンボル: メソッド getVipNum()
場所: インタフェース Customer
該当のソースコード
java
1//サンプル 2import java.util.ArrayList; 3import java.util.List; 4 5interface Customer { 6 public int getNum(); 7} 8 9class Normal implements Customer{ 10 11 private int num; 12 13 public Normal(int num) { 14 this.num = num; 15 } 16 17 public int getNum() { 18 return num; 19 } 20} 21 22class Vip implements Customer { 23 24 private int num; 25 26 private int vipnum; 27 28 public Vip(int num, int vipnum) { 29 this.num = num; 30 this.vipnum = vipnum; 31 } 32 33 public int getNum() { 34 return num; 35 } 36 37 public int getVipNum() { 38 return vipnum; 39 } 40} 41 42class Main{ 43 public static void main(String args[]) { 44 List<Customer> customerlist = new ArrayList<>(); 45 46 List.add(new Normal(1)); 47 List.add(new Vip(2, 1)); 48 49 //ここでArrayListの2個目に入っているVipからvipnumの値が欲しい 50 //CustomerインタフェースにはgetVipNumは定義されていないので失敗する 51 customerlist.get(2).getVipNum(); 52 } 53}
試したこと
エラー原因を調べ、CustomerインタフェースとしてではなくVipクラスとしてgetする方法を探したが、見つからなかった。
補足情報(FW/ツールのバージョンなど)
javaバージョン11
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/03 11:37
2021/07/03 11:39
2021/07/03 11:53