比方說,我有兩個看起來像這樣的類:
public class classA {
private Boolean is_started;
public classA(Boolean is_started) {
this.is_started = started;
}
public Boolean getIs_started(){
return this.is_started;
}
}
public class classB {
private String token;
public classA(String token) {
this.token = token;
}
public String get_token(){
return this.token;
}
}
我從另一個類呼叫這兩個類,如下所示:
public class CallingClass {
public void function1() {
ClassA stepA = new ClassA(<some boolean>);
commonFunction(stepA);
}
public void function2() {
ClassB stepB = new ClassB(<some string>);
commonFunction(stepB);
}
public <T> void commonFunction(Class<T> dataObject) {
//An if statement that has a condition that only calls a function in classB {
String token = dataObject.get_token();
}
//An if statement that has a condition that only calls a function in classA {
Boolean is_started = dataObject.getIS_started();
}
//It returns error : The method [get_token()/getIS_started()] is undefined for the type Class<T>
我想確保我可以呼叫不同的物件而無需在函式中指定它們。例如,我想提供ClassA和ClassB作為commonFunction上面示例中的引數。我如何使用泛型實作它?
uj5u.com熱心網友回復:
您需要某種方法將類聯系在一起,即“此實體實作了一個呼叫的方法getToken,該方法回傳某種結果”
最簡單的起點是 a interface,例如...
public interface Tokenable<T> {
public T getToken();
}
然后雙方ClassA并ClassB就需要實作這個interface要求,例如...
public class ClassA implements Tokenable<Boolean> {
private Boolean started;
public ClassA(Boolean started) {
this.started = started;
}
@Override
public Boolean getToken() {
return started;
}
}
public class ClassB implements Tokenable<String> {
private String token;
public ClassB(String token) {
this.token = token;
}
@Override
public String getToken() {
return token;
}
}
然后你可以將回電公共化......
public class CallingClass {
public void function1() {
ClassA stepA = new ClassA(false);
commonFunction(stepA);
}
public void function2() {
ClassB stepB = new ClassB("hello");
commonFunction(stepB);
}
public <T> void commonFunction(Tokenable<T> dataObject) {
T token = dataObject.getToken();
}
}
如果不提供某種共同的祖先,您將無法真正使其作業 -Class沒有定義getToken方法,因此您需要某種共同的祖先才能呼叫它(有一個“hacky”方法來做到這一點,但你真的,真的,真的不想去那個兔子洞)
uj5u.com熱心網友回復:
可能是我在您的問題中遺漏了一些東西,因為尚不完全清楚您要實作的目標,但您嘗試執行此操作的方式似乎不太正確。
commonFunction如果引數是一種型別,則邏輯會以一種方式運行,如果引數是另一種型別,則邏輯會以另一種方式運行。看起來您真正應該做的是在 ClassA 和 ClassB 中擁有該邏輯。所以他們都應該實作一些在 ClassA 中以一種方式運行而在 ClassB 中以另一種方式運行的方法。然后commonFunction可以將所有引數視為相同。
一般而言,如果您正在測驗引數的型別并在不同情況下觸發不同的行為,那么這很好地表明該行為確實屬于這些類本身,前提是您是在這種情況下定義類的人。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/363406.html
上一篇:“無法在當前背景關系中推斷閉包引數'b'的型別”。呼叫函式時出現此錯誤
下一篇:C#沒有裝箱轉換CS0315錯誤
