Java内类编译误差



我正在尝试实例化公共非静态内类,但我一直遇到汇编错误。

我有2个类:一个树类和一个主要类。

我最终试图实例化点数,但是为了这个问题,我试图只是实例化点对象。

汇编错误说

点无法解析为类型

我在做什么错?

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>();
    }
}

我怀疑您不想有TreePoint的两个不同类型的参数。您写的方式是,PointT遮蔽了TreeT,因此参数实际上是不同的。如果您希望它们相同,请删除内部类的T。这样,外部类的T也可以在内部类中使用。

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 s,则可以像这样实例化 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始终包含点,因此在此处使用仿制药没有用。这有点取决于您要对此类别进行的操作,是否要删除Point中的Tree的类型参数。

可能性1 删除Tree的类型参数

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

如果要从Tree

中的方法返回Point,则可以使用。

可能性2 删除Point的类型参数

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

如果您希望Tree中的方法返回类型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();

最新更新