小编Fel*_*ett的帖子

为什么 Java 不接受泛型隐含的返回类型?

public class Role<A extends Actor> {
    protected A actor;
    protected A constructActor() {
        return new Actor();
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么这个 Java 代码不能编译?我的 IDE 告诉我,constructActor() 需要返回一个 A 类型,而不是一个 Actor 类型。但据我所知,我明确表示 A 将是一个 Actor 或一个 Actor 的扩展。那么为什么 Java 会这样呢?

编辑:

您可能会进一步帮助我了解“通用”工厂模式的想法:

实际上,constructActor() 方法并不打算总是返回一个 Actor 的实例(因此是受保护的访问),而是作为每个不必构造指定版本的 Actor 的子类的某种默认情况:

// the first two cases should construct specified versions of the Actor
public class HeroRole<HeroActor> {
    @Override protected HeroActor constructActor() {
        return new HeroActor();
    }
}
public class EnemyRole<EnemyActor> {
    @Override protected EnemyActor constructActor() {
        return …
Run Code Online (Sandbox Code Playgroud)

java generics

3
推荐指数
1
解决办法
83
查看次数

标签 统计

generics ×1

java ×1