java - 创建泛型类的公共(public)内部类的实例

标签 java generics instantiation inner-classes

所以我有如下内容:

public class Enclosing<T extends Comparable<T>> {
    // non-relevant code snipped
    public class Inner {
        private T value;
        public Inner(T t) {
            value = t;
        }
    }
}

万物皆可编译,天下皆大欢喜。但是,每当我尝试创建 Enclosing.Inner 的实例时如下,我不行:

new Enclosing<Integer>.Inner(5);

出现以下错误:

Cannot allocate the member type Enclosing<Integer>.Inner using a parameterized compound name; use its simple name and an enclosing instance of type Enclosing<Integer>.

重要的是要注意我不能使内部类static ,因为它包含类型为 T 的字段.

我该如何解决这个问题?

最佳答案

To instantiate an inner class ,你必须先实例化外部类。然后,使用以下语法在外部对象中创建内部对象:

  Enclosing<Integer> outerObject = new Enclosing<Integer>();
  Enclosing<Integer>.Inner innerObject = outerObject.new Inner();

丑陋的语法暗示了这种设计中的代码味道。封闭类中可能应该有某种工厂方法(getInner 或其他东西),如果从其封闭类外部使用内部类,则内部类可能应该实现一个公共(public)接口(interface)。

关于java - 创建泛型类的公共(public)内部类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8221088/

相关文章:

scala - 如何构建泛型类型的匿名实例?

arrays - 在 AS3 中使用值数组初始化 Vector 是否会部分违背 Vector 的目的?

java - Selenium Web 驱动程序 : findElement(By. 名称 ..... 和 headless 浏览器

JAVA。使用反射来深拷贝对象

java - Java 中的动态泛型类型

java - 使用菱形运算符创建通用数组

java - 在一行定义变量并在下一行创建它的实例有什么好处

c# - 为什么 C# 实例构造函数的名称与返回的类型不同?

java - 在我的 Pac-Man 女士实现中可能过度使用了 java 接口(interface)

java - 每天不同的iframe