【问题标题】:Creating a function with Object<?> parameter使用 Object<?> 参数创建函数
【发布时间】:2013-09-11 14:30:48
【问题描述】:

我有一个这样的主类:

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&lt;myType&gt; obj); 无效。

【问题讨论】:

  • java.lang.Object不带类型参数,所以Object&lt;Whatever&gt;是行不通的。
  • myType 是变量,而不是类,我想你不能这样使用它。你的代码对我来说似乎很可疑,你想完成什么?
  • ? extends Object和刚才说的?不一样
  • 我猜ChildClass 扩展了MainClass,但在您的代码中缺失

标签: java generics methods


【解决方案1】:

您的代码有多个错误:

  1. 类声明后有括号 ()
  2. 您试图将泛型参数提供给没有泛型参数的 Object。

此外,您应该尝试声明一个泛型类型(如`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
  • 谢谢!我不知道 T 可以用于那个。
  • 他没有对 Class myType 做任何事情,他可以删除它并保留默认构造函数,“Bou Barnouss”的答案更准确恕我直言
  • 不是更准确,只是更可取。是的,同意,您不需要对 Class 做任何事情,但是如果您使解决方案与没有太多解释的尝试过的解决方案大相径庭,那么它对尽可能多地提出问题的人没有帮助.
【解决方案2】:

你应该这样做:

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

public class ChildClass extends MainClass<String> {

}

【讨论】:

  • 而不仅仅是显示代码,这将有助于解释原始代码的错误和不同之处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-14
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
相关资源
最近更新 更多