如何在Java中指定泛型类的内部类?

时间:2013-10-11 15:21:43

标签: java generics

我有以下代码可以正常工作:

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)

有没有办法写这个通用的?

1 个答案:

答案 0 :(得分:4)

为什么不重载make

X make(X.inner... inner) {
    return new X();
}

Y make(Y.inner... inner) {
    return new Y();
}

我不相信有一种方法可以使用泛型,因为XY之间没有任何关系,所以它们不能通过单一参数在第一名(虽然即使它们是相关的,但仍然不可能,因为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) {
    ...
}

虽然我会花点时间退后一步,考虑一下这是否真的是你想要做的。它看起来很复杂,也许有一个更简单的解决方案?