應該採用通用對象並返回另一個通用對象的方法的簽名是什麼,該通用對象要麼是原始類的相同要麼是子類?也就是說,如果方法採用某種泛型類A
,則返回的對象保證爲A
或B
,例如B extends A
(直接或間接)?什麼方法簽名適用於返回通用對象?
下面的代碼體現了什麼,我試圖做的,在功能getList()
:
package com.company;
import java.util.ArrayList;
public class Main {
private Main(){
List<String> stringList = new GenericMessageListCreator.getList(StringGenericMessage.class);
}
private class GenericMessageListCreator() {
public List<GenericMessage<T1>> getList(Class<T1 extends GenericMessage> clazz) {
return new ArrayList<T1>();
}
}
private class GenericMessage<T> {
public GenericMessage(){};
private T internalValue;
public void setValue(T value) {
this.internalValue = value;
}
public void echoValue() {
System.out.println("I contain " + internalValue);
}
}
private class StringMessage extends GenericMessage<String>{}
private class IntegerMessage extends GenericMessage<Integer>{}
}
例不談,實際上我在寫一個類的的註冊表,在命令用於Command
小號模式。當我通過類獲取對象時,我想獲取合適的Command
並將對象傳遞給它。
什麼是返回一個'GenericMessage',而不僅僅是一個'T'的地步? –
在這個例子中沒有。問題最後解釋了我想使用它的真正原因。 A實際上想要返回處理T對象A的命令。然後我想將原始對象傳遞給該命令,並對結果進行處理。返回列表沒問題。此外,我只是選擇列表作爲已經具有通用簽名的便利。 –
Wes