2013-01-24 42 views
-1

我有得到由下面的方法如何識別返回的對象的方法類型?

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

沒有爲obj的getter方法通知的輔助類。有什麼方法可以確定調用者關於obj的類型嗎?該對象可以採取任何對象,如:

List<Switch> 
Switch 
List<Link> 

調用者必須在調用getter方法後處理obj。有沒有辦法做到這一點?

回答

0

您始終可以從obj.getClass()知道課程(然後是課程名稱)。你想用它進一步處理?

如果你想調用的OBJ方法 - 你需要反思.. 事情是這樣的 -

Class myClass = obj.getClass(); 
Method m = myClass.getDeclaredMethod("get",new Class[] {}); 
Object result = m.invoke(myObject,null); 
+1

'obj.getClass()'給你'Class'對象。 http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html獲取它的名字使用'obj.getClass()。getName()' – luiges90

+0

是啊..添加後做什麼上課。 – Nrj

+0

獲取對象後,我們需要調用一些方法。使用反射會很麻煩,因爲對象是許多對象的一個​​實例。 – Pradeep

0

你可以知道使用instanceof operator.Consider下面的示例對象類型:

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; 
    } 
} 

正如你所看到的,我有一個返回對象類型的方法,如果你要改變該方法的返回值,你可以很容易地理解發生了什麼。還有一件事你不能在運行時猜測泛型類型因爲「通用類型在運行前會被擦除」。希望你明白我的觀點。乾杯

+0

該對象可以是許多對象的一個​​實例。會有很多其他條件。任何其他方式來做到這一點? – Pradeep

相關問題