我有以下代码可以正常工作:
class ingen
{
static class X
{
static class inner {}
static class A extends inner {}
static class B extends inner {}
}
static class Y
{
static class inner {}
static class A extends inner {}
static class B extends inner {}
}
X makeX (X.inner ... inner)
{
return new X();
}
Y makeY (Y.inner ... inner)
{
return new Y();
}
}
现在我想为make
方法编写一个通用名称。但我找不到如何指定泛型类的内部类的方法。我尝试了这个,但它没有编译:
<T> T make (T.inner ... inner)
有没有办法写这个通用的?
答案 0 :(得分:4)
为什么不重载make
?
X make(X.inner... inner) {
return new X();
}
Y make(Y.inner... inner) {
return new Y();
}
我不相信有一种方法可以使用泛型,因为X
和Y
之间没有任何关系,所以它们不能通过单一参数在第一名(虽然即使它们是相关的,但仍然不可能,因为inner
是静态的)。
如果您选择稍微重新设计课程,可以尝试以下方法:
class Base {
class inner {
}
}
class X extends Base {
class A extends inner {
}
class B extends inner {
}
}
class Y extends Base {
class A extends inner {
}
class B extends inner {
}
}
<T extends Base> Base make(T.inner... inner) {
...
}
虽然我会花点时间退后一步,考虑一下这是否真的是你想要做的。它看起来很复杂,也许有一个更简单的解决方案?