public class AbsList<T> {
private List<T> mList = new ArrayList<T>();
private T valueToAdd;
private AbsList(T valueToAdd) {
this.valueToAdd = valueToAdd;
}
// 你本身的 factory method 不合理,修改成这样
public static <E> AbsList<E> newInstance(E valueToAdd) {
return new AbsList<E>(valueToAdd);
}
public void go() {
this.mList.add(valueToAdd);
for (T element : mList) {
System.out.println(String.valueOf(element));
}
}
public static void main(String args[]) {
AbsList.newInstance("string").go();
}
}
或有点 syntax eror, 意思懂就好
※ 引述《changyuheng (张昱珩)》之铭言:
: 希望下面的 mList 可以不 cast 直接使用,请问是不是做不到?
: import java.util.LinkedList;
: import java.util.List;
: public class AbsList {
: private List<?> mList;
: private String mType;
: public AbsList newInstance(String type) {
: mType = type;
: switch (type) {
: case "String":
: mList = new LinkedList<String>();
: break;
: case "Number":
: mList = new LinkedList<Number>();
: }
: return this;
: }
: public void go() {
: switch (mType) {
: case "String":
: ((List<String>) mList).add("A");
: for (String s : (List<String>) mList)
: System.out.println(s);
: break;
: case "Number":
: ((List<Number>) mList).add(0);
: for (Number n : (List<Number>) mList)
: System.out.println("" + n);
: }
: }
: public static void main (String[] args) {
: new AbsList().newInstance("String").go();
: }
: }