有人可以帮助在参数化外部类中继承非参数化嵌套类的语法,如下所示吗?
public abstract class Foo<T> {
public class Bar {
Set<T> aSet;
}
abstract class Baz {
abstract void doSomething(Map<? extends Bar, T> aMap);
}
}
然后在一个单独的文件中,我不完全确定如何在不参数化S
的情况下定义类型变量ConcreteBaz
。我不能使用像extends Foo<?>.Baz
这样的通配符变量(我认为),因为我需要在doSomething
方法中访问该泛型类型变量:
public class ConcreteBaz extends Foo<S>.Baz { // compilation error
public ConcreteBaz(Foo<S> foo) { foo.super(); }
public void doSomething(Map<? extends Foo<S>.Bar, S> aMap) { ... }
}
有人可以帮我解决这个问题吗?感谢。
答案 0 :(得分:0)
您的问题是嵌套类是非静态的。我会检查出来,但我非常确定你不能将这些类子类化,除非是嵌套在同一个类中,或者在创建匿名类型时。
声明嵌套类是否可行?他们肯定会工作。
编辑:抓住所有这些。我没有编译错误。您的案件中S
是什么?您确实意识到必须将具体类传递给Foo,并且不能使用未知参数S对其进行参数化?
答案 1 :(得分:0)
如果ConcreteBaz
需要引用type参数,那意味着它需要type参数本身:
public class ConcreteBaz<S> extends Foo<S>.Baz {
答案 2 :(得分:0)
将S
声明为类型参数:
public class ConcreteBaz<S> extends Foo<S>.Baz {
否则编译器会认为S
是具体类型而不是类型参数。
完整示例:
public class ConcreteBaz<S> extends Foo<S>.Baz {
public ConcreteBaz(Foo<S> foo) {
foo.super();
}
@Override
void doSomething(Map<? extends Foo<S>.Bar, S> aMap) {
// ...
}
}