Java 内部class 编译错误

Java Inner class compilation error

我正在尝试实例化一个 public 非静态内部 class 但我一直收到编译错误。

我有 2 个 classes:一个树 class 和一个主树 class。

我最终想实例化一个点数组,但为了这个问题,我只想实例化一个 Point 对象。

编译错误说

Point can't be resolved to a type

我做错了什么?

Tree.java

public class Tree<T> {  
    public class Point<T> {
        public T position[];
    }
}

Main.java

public class Main {
    public static void main(String args[]) {
        Point<Double> point = new Tree<Point<Double>>().new Point<Double>();
    }
}

声明内部 class 时,只需省略 T 参数即可。

只在内部使用T,但不要尝试重新定义同名T的类型参数。

如评论中所建议:

Tree<Double>.Point<Double> point = new Tree<Double>().new Point<Double>();

但它看起来有点太多余了,你不觉得吗?

你可以删除点的通用部分

public class Tree<T> {
    public class Point {
        public T position[];
    }
}


Tree<Double>.Point point = new Tree<Double>().new Point();

我怀疑您不希望 TreePoint 有两个不同类型的参数。你这样写,PointTTreeT给遮住了,所以参数其实是不一样的。如果你想让它们一样,去掉里面的class的T。这样,外部 class 的 T 也可以在内部 class 中使用。

public class Tree<T> {  
    public class Point {
        public T position[];
    }

    public static void main(String args[]) {
        Tree<Double>.Point point = new Tree<Double>().new Point();
    }
}

如果你真的想要两个不同的T,你可以像这样实例化一个Point。但是我强烈建议重命名其中一个类型参数以防止混淆。

Tree<Object>.Point<Double> point = new Tree<>().new Point<>();

编辑:根据评论:

Tree<Tree<?>.Point<Double>>.Point<Double> point = new Tree<Tree<?>.Point<Double>>().new Point<>();

编辑:根据进一步评论

因为你想要一个 Tree 总是包含点,所以在这里使用泛型是没有用的。这有点取决于你想用这个class做什么,是否删除Point.

之一的Tree类型参数

可能性 1 删除 Tree

的类型参数
public class Tree {  
    public class Point<T> {
        public T position[];
    }
}

如果你想从 Tree

中的方法 return 一个 Point

可能性 2 删除 Point

的类型参数
public class Tree<T> {  
    public class Point {
        public T position[];
    }
}

如果你想要 Tree 到 return 类型 T

对象中的方法,你应该使用它