2012-09-30 49 views
0

假設我們有2類A,B:調用通用類型中的一個方法類

class A extends SomeClass { 
    public String getProp() { 
     return "propA"; 
    } 
} 

class B extends SomeOtherClass{ 
    private String propB; 

    public B setProp(String value) { 
     propB = value; 
     return this; 
    } 

    public String getProp() { 
     return propB; 
    } 
} 

並假設我們稱爲X另​​一個類和這個類X有一個方法的someMethod其需要一參考這些類的,是有辦法,我們可以使用泛型在這種方法根據已經通過對象調用getProp()?

+0

號使用的接口。 – SLaks

回答

0

嗯,這可以被認爲是一個答案,但我不喜歡它..

public class X<T>{ 
public void someMethod(T t) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{ 
    t.getClass().getMethod("getProp", null).invoke(t, null); 
} 
public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { 
    X<A> weird = new X<>(); 
    A a = new A(); 
    weird.someMethod(a); 
} 

}

0

泛型是爲在編譯時類型安全,而不是在運行時實現多態。所以我不認爲你所問的是可能的。

在您的情況,您應考慮創建一個接口。類似這樣的:

public interface PropInf{ 
    String getProp(); 
} 

然後你將不得不在兩個類中實現這個接口。使用這個接口的引用變量,你可以實現多態。

2

不使用泛型。

您可以爲具有getProp()方法的這些類定義一個通用的接口。然後使用它的方法應該接受接口的實例,並且可以調用接口,這將是你在通過具體的類來實現對getProp()方法

+0

我已經知道答案,但問題是使用泛型.. – Khafaga

+0

好了,短的答案是「沒有」的說法。 – driis

0

定義一個interface如下:

interface StringPropProvider { 
    String getProp(); 
} 

然後定義你的類實現該接口:

class A extends SomeClass implements StringPropProvider { 
    public String getProp() { 
    return "propA"; 
} 

class B extends SomeOtherClass implements StringPropProvider { 
    private String propB; 

    public B setProp(String value) { 
    propB = value; 
    return this; 
    } 

    public String getProp() { 
    return propB; 
    } 
}