2

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

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)

有没有办法写这个泛型?

4

1 回答 1

4

为什么不只是过载make

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

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

我不相信有一种方法可以用泛型来做到这一点,因为 and 之间没有关系XY所以它们首先不能被单一类型参数统一(尽管即使它们是相关的,它仍然不会' t 是可能的,因为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) {
    ...
}

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

于 2013-10-11T15:24:43.137 回答