gpt4 book ai didi

java - 从方法返回 Class

转载 作者:搜寻专家 更新时间:2023-11-01 02:02:09 26 4
gpt4 key购买 nike

我有两个扩展公共(public)基类的类。基类的代码,对于一个具体的子类,需要知道 Class另一个具体的子类。所以,给定 FooBar扩展Base , Foo 的实例需要知道Bar.class , 和 Bar 的实例需要知道Foo.class .

而且,愚蠢的我,我正在尝试做正确的事并使用 Java 泛型来确保子类返回一个有效的 Java 类对象,一个扩展基类的对象。

所以,我尝试了这个:

class Base {
abstract protected <T extends Base> Class<T> getOtherClass();
}

编译器似乎对这种构造相当满意。问题出在实现上。

首先,我试过:

class Foo extends Base {
@Override
protected <T extends Base> Class<T> getOtherClass() {
return Bar.class;
}
}

(其中 Bar 也扩展了 Base )

提示说我的返回值类型不匹配,它需要强制转换。

然后,我尝试了:

class Foo extends Base {
@Override
protected Class<Bar> getOtherClass() {
return Bar.class;
}
}

现在编译器提示需要在 Class<Bar> 进行强制转换.

然后我尝试了:

class Foo extends Base {
@Override
protected Class<Base> getOtherClass() {
return Bar.class;
}
}

现在我收到两个投诉:需要在 Class<Base> 中进行转换在返回值中。

有没有一种表达方式可以避免任何类型转换?

最佳答案

abstract class Base<T extends Base> {
abstract Class<T> getOtherClass();
}
class Foo extends Base<Bar> {
@Override Class<Bar> getOtherClass() { return Bar.class; }
}

……或者……

abstract class Base {
abstract Class<? extends Base> getOtherClass();
}
class Foo extends Base {
@Override Class<Bar> getOtherClass() { return Bar.class; }
}

关于java - 从方法返回 Class<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43334068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com