繁体   English   中英

做像 <getClass()> Java中是否存在通用参数?

[英]Does something like a <getClass()> generic parameter exist in Java?

我想有一个抽象方法,该方法具有实例的确切类的参数。 例如:

abstract class Foo {
    abstract void aFunc(???? newInst);
}
class Bar extends Foo {
    @Override
    void aFunc(Bar newInst);
}
class Baz extends Foo {
    @Override
    void aFunc(Baz newInst);
}

实际上,我希望能够访问所有子类字段和方法,而不必检查和强制转换newInst参数。 (因为该函数将从进行检查和转换的中央处理程序位置调用)。

我知道我可以通过用Foo<T extends Foo>参数化Foo来做到这一点,但我希望避免在class Name extends Foo<Name>情况下声明子class Name extends Foo<Name>

我怀疑是否有可能,而且我一直无法找到关于该主题的任何内容,但是我想确认没有什么我想念的。

元注释:

您想要拥有的东西确实打破了多态性:现在您无法在可以使用Foo任何地方使用BarBaz因为它们具有不再兼容的aFunc标记。

但是,您可以做的是使用更具体的返回类型:

class Foo {
  Foo aFunc();
}

class Bar extends Foo {
  @Override
  Bar aFunc();
}

已验证。 您可以使用Bar的实例代替Foo并调用其aFunc方法; 那么您也可以将该方法的结果用作Foo的实例。 因此从Java 1.5开始, JLS就允许使用协变返回类型

感谢所有评论帮助的人。

正确的方法是在class Bar extends Foo<Bar>声明该类,为简单起见,我将Foo作为参数传递,并使所有子类自己强制转换参数(如果需要)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM