我有得到由下面的方法如何識別返回的對象的方法類型?
public void setObject(Object obj) {
this.obj = obj
}
沒有爲obj的getter方法通知的輔助類。有什麼方法可以確定調用者關於obj的類型嗎?該對象可以採取任何對象,如:
List<Switch>
Switch
List<Link>
調用者必須在調用getter方法後處理obj。有沒有辦法做到這一點?
我有得到由下面的方法如何識別返回的對象的方法類型?
public void setObject(Object obj) {
this.obj = obj
}
沒有爲obj的getter方法通知的輔助類。有什麼方法可以確定調用者關於obj的類型嗎?該對象可以採取任何對象,如:
List<Switch>
Switch
List<Link>
調用者必須在調用getter方法後處理obj。有沒有辦法做到這一點?
您始終可以從obj.getClass()
知道課程(然後是課程名稱)。你想用它進一步處理?
如果你想調用的OBJ方法 - 你需要反思.. 事情是這樣的 -
Class myClass = obj.getClass();
Method m = myClass.getDeclaredMethod("get",new Class[] {});
Object result = m.invoke(myObject,null);
你可以知道使用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;
}
}
正如你所看到的,我有一個返回對象類型的方法,如果你要改變該方法的返回值,你可以很容易地理解發生了什麼。還有一件事你不能在運行時猜測泛型類型因爲「通用類型在運行前會被擦除」。希望你明白我的觀點。乾杯
該對象可以是許多對象的一個實例。會有很多其他條件。任何其他方式來做到這一點? – Pradeep
這可能對你有所幫助。它會通知您如何獲取參數化類型。
'obj.getClass()'給你'Class'對象。 http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html獲取它的名字使用'obj.getClass()。getName()' – luiges90
是啊..添加後做什麼上課。 – Nrj
獲取對象後,我們需要調用一些方法。使用反射會很麻煩,因爲對象是許多對象的一個實例。 – Pradeep