【问题标题】:Java how to specify a method that takes a subclass of a superclassJava如何指定采用超类的子类的方法
【发布时间】:2013-07-26 14:32:59
【问题描述】:

这是我想做的:

public MyClass extends MySuperClass{

}


public class MySuperClass {

public static void main( String[] args ) { 
MyClass mc = setProperties( new Myclass() );
}

public static Class<? extends MySuperClass> setProperties(Class<? extends MySuperClass> myClass){
// set some static properties
return myClass;
}

}

我希望能够将 MySuperClass 的任何子类传递给 setPropterties 并在超类中设置一些属性后返回它。退货只是为了方便。我只是缺少一些语法吗?还是我对类和通配符的理解不正确?

现在我得到:MySuperClass 类型中的方法 setProperties(Class) 不适用于参数 (MyClass)

【问题讨论】:

  • 您需要传递 Class 对象而不是它的实例

标签: java inheritance wildcard


【解决方案1】:

我希望能够将 MySuperClass 的任何子类传递给 setPropterties 并在超类中设置一些属性后返回它。退货只是为了方便。我只是缺少一些语法吗?还是我对Class的理解

public static MySuperClass setProperties(MySuperClass superClass)
{
      // Accept any instance or subclass of MySuperClass
      return superClass;
}

Class&lt;?&gt;的使用

这表示 unknown 类型。 (幽灵般的)。这基本上意味着你不知道这个方法将返回什么类类型。

有用的链接http://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html

【讨论】:

  • 鉴于 OP 的描述,此解决方案非常适合。虽然我必须承认,但我更能证明一点。
  • 哦,这很简单,谢谢克里斯,我把事情弄复杂了 :)
  • 哈,哇。我有一部分是在讽刺。不要让任何人告诉你讽刺没有用处!
  • 暂时不能接受你的回答,但是Class>有什么用呢?
  • 我能想到的 Class> 的最佳示例类似于 json/xml 解析器。它需要解析字符串,以及一个告诉它应该变成/返回什么的类。 public static X jsonConversion(String json, Class clazz)
猜你喜欢
  • 1970-01-01
  • 2019-06-29
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
  • 1970-01-01
  • 2019-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多