使用Object <! - ? - >参数创建函数

时间:2013-09-11 14:30:49

标签: java generics methods

我有一个这样的主要类:

public class MainClass() {
  public Class<? extends Object> myType;
  // This does not work, but thats what I want:
  public MainClass(Class<? extends Object> type) {
    myType = type;
  }
  public void myMethod(Object<myType> myParameter) {
    // Do stuff
  }
}

有些类扩展了这个类,例如:

public class ChildClass() extends MainClass {
  public ChildClass() {
    super((Class<? extends Object>) String.class);
    // this should be changeable to what ever class then String.class
  }
}

如何使用变量类类型创建父方法? 代码myMethod(Object<myType> obj);不起作用。

2 个答案:

答案 0 :(得分:3)

您的代码有多处错误:

  1. 在您声明类声明后,您有括号()
  2. 您正在尝试将通用参数提供给Object,该参数没有通用参数。
  3. 此外,您应该尝试声明泛型类型(如`T`)而不是使用`?`。试试这个:

    public class MainClass<T extends Object> {
          public Class<T> myType;
    
          public MainClass(Class<T> type) {
            myType = type;
          }
          public void myMethod(T myParameter) {
            // Do stuff
          }
    }
    
    class ChildClass extends MainClass<String> {
          public ChildClass() {
            super(String.class);
            // this should be changeable to what ever class then String.class
          }
    }
    

    另外,请注意,`T extends Object`是完全多余的,但我把它留在了你想要它。

答案 1 :(得分:2)

你应该这样做:

public class MainClass<T> {
  public void myMethod(T myParameter) {
    // Do stuff
  }
}

public class ChildClass extends MainClass<String> {

}