重写Java中嵌套在参数化外部类中的非参数化类

重写Java中嵌套在参数化外部类中的非参数化类,java,Java,有人能帮助我们在参数化的外部类中对非参数化的嵌套类进行子类化的语法吗 public abstract class Foo<T> { public class Bar { Set<T> aSet; } abstract class Baz { abstract void doSomething(Map<? extends Bar, T> aMap); } } 有人能帮我想个办法吗?谢谢。您的

有人能帮助我们在参数化的外部类中对非参数化的嵌套类进行子类化的语法吗

public abstract class Foo<T> {

    public class Bar {
        Set<T> aSet;
    }

    abstract class Baz {
        abstract void doSomething(Map<? extends Bar, T> aMap);
    } 
}
有人能帮我想个办法吗?谢谢。

您的问题是嵌套类是非静态的。我会检查一下,但我非常确定您不能对此类类进行子类化,除非嵌套在同一类中,或者在创建匿名类型时

声明嵌套类静态是否可行?这肯定会奏效

编辑:划掉所有这些。我没有编译错误。你的箱子里有什么?您确实意识到必须将一个具体的类传递给Foo,并且不能使用未知参数将其参数化?

您的问题是嵌套类是非静态的。我会检查一下,但我非常确定您不能对此类类进行子类化,除非嵌套在同一类中,或者在创建匿名类型时

声明嵌套类静态是否可行?这肯定会奏效

编辑:划掉所有这些。我没有编译错误。你的箱子里有什么?您确实意识到必须将一个具体类传递给Foo,并且不能使用未知参数将其参数化?

如果ConcreteBaz需要引用类型参数,这意味着它需要类型参数本身:

public class ConcreteBaz<S> extends Foo<S>.Baz {
如果ConcreteBaz需要引用类型参数,这意味着它需要类型参数本身:

public class ConcreteBaz<S> extends Foo<S>.Baz {
将S声明为类型参数:

public class ConcreteBaz<S> extends Foo<S>.Baz {
将S声明为类型参数:

public class ConcreteBaz<S> extends Foo<S>.Baz {

您可以向构造函数提供封闭Foo的实例,请参见我的示例,我已经在IDE中尝试过它。@Jesper:哇,谢谢。我已经删除了我答案中的这一部分。@lrfy:是的,但显然我没有以正确的方式尝试!:-朋德站着。在我看来,既然类型变量T对Foo.Baz是可见的,那么它对Foo.Baz的子类也是可见的。我猜泛型类型变量的继承方式与其他实例变量不同。您可以向构造函数提供封闭Foo的实例,请参阅我的示例,我在IDE中尝试过它。@Jesper:哇,谢谢。我已经删除了我答案中的这一部分。@lrfy:是的,但显然我没有以正确的方式尝试!:-朋德站着。在我看来,既然类型变量T对Foo.Baz是可见的,那么它对Foo.Baz的子类也是可见的。我猜泛型类型变量不像其他实例变量那样被继承。