0

次のようなメソッドがあります。このクラスは、現在 2 つの異なるクラスを渡すことができるオブジェクトのリストを保持しています。

public class DataTableEntity {
 List<Objects> objectContainer;

 public void setLinks(Class cls){
 for(Object obj : objectContainer){
  //the cls variable will hold what type of object it is 
  //so I need to somehow say if its a 'dog' then the obj I am going through is a dog
  // and the method is dog.getName else it might be cat and cat.getCatName etc.
 }
}

この関数は、リストが具体的に何であるかを通知され、クライアントに送信される前に、そのリスト内のオブジェクトのプロパティを正しくフォーマットする必要があります。オブジェクトが異なれば、これらのプロパティのセッター名とゲッター名も異なります。したがって、どうにかしてジェネリック クラス オブジェクトを取得し、それが実際にどのような種類のクラスであるかを確認する必要があります。これにより、「.getAbc/.setAbc」または「.getXyz/.setXyz」のどのメソッドを使用するかを知ることができます。

これは可能ですか?

4

2 に答える 2

2

このような ?

public class DataTableEntity {
    List<Objects> objectContainer;

    // The Objects know already which Class they are, no need to pass it
    public void setLinks() {
        for(Object obj : objectContainer) {
            if(obj instanceof ClassA) {
                ClassA a = (ClassA)obj;
                a.doSomething();
            }
            else if(obj instanceof ClassB) {
                ClassB b = (ClassB)obj;
                b.doSomethingElse();
            }
            // and so on ...
        }
    }
}

すべての異なるクラスをチェックする必要がないため、共通のインターフェイスを使用するとコードが改善されます。しかし、それがあなたのケースで可能かどうかはわかりません

于 2013-08-26T14:04:49.180 に答える
0

instanceofステートメントについて聞いたことがありますか?

オブジェクトがクラスまたはそのサブクラスのインスタンスであるかどうかを確認し、ブール値を返すことができます。

お気に入り:

anyObject instanceof Object       // return true

integerObject instanceof Integer  // return true

integerObject instanceof Number   // return true

integerObject instanceof Double   // return false
于 2013-08-26T13:41:54.430 に答える