-1

以下のメソッドで通知されるヘルパークラスがあります

public void setObject(Object obj) {
    this.obj =  obj
}

objにはgetterメソッドがあります。obj の型について呼び出し元を識別する方法はありますか。オブジェクトは次のような任意のオブジェクトを取ることができます:

List<Switch>
Switch
List<Link>

呼び出し元は、getter メソッドを呼び出した後に obj を処理する必要があります。それを行う方法はありますか?

4

3 に答える 3

0

演算子を使用してオブジェクトタイプを知ることができますinstanceof。次の例を検討してください。

import java.util.ArrayList;
import java.util.List;

public class Test {

    public static void main(String[] args) {
        if (getObject() instanceof A) {
            System.out.println("A class");
        }
        if (getObject() instanceof B) {
            System.out.println("B class");
        }
        if (getObject() instanceof List) {
            System.out.println("List class");
        }
    }

    /**
     * 
     * @return Object type. 
     */
    public static Object getObject() {
        //Change this value to new A() or new B();
        return new ArrayList<A>();
    }
}
class A {

    private String aName;

    public A(String aName) {
        this.aName = aName;
    }

    public String getaName() {
        return aName;
    }

    public void setaName(String aName) {
        this.aName = aName;
    }
}

class B {

    private String bName;

    public B(String bName) {
        this.bName = bName;
    }

    public String getbName() {
        return bName;
    }

    public void setbName(String bName) {
        this.bName = bName;
    }
}

ご覧のとおり、オブジェクト型を返すメソッドがあり、そのメソッドの戻り値を変更する場合は、何が起こっているのかを簡単に理解できます。また、「ジェネリック型」のため、実行時にジェネリック型を推測することはできません。実行前に消去されます」。

于 2013-01-24T12:25:25.323 に答える
0

これはあなたを助けるかもしれません。パラメータ化されたタイプを取得する方法を通知します。

java.util.Listのジェネリック型を取得します

于 2013-01-24T12:26:28.410 に答える
0

からクラス(そしてクラス名)をいつでも知ることができますobj.getClass()。さらにそれで何をしたいですか?

objでメソッドを呼び出したい場合-リフレクションが必要です..このようなもの-

Class myClass = obj.getClass();
Method m = myClass.getDeclaredMethod("get",new Class[] {});
Object result = m.invoke(myObject,null);
于 2013-01-24T12:12:35.237 に答える