我正在尝试实例化公共非静态内类,但我一直遇到汇编错误。
我有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>();
}
}
我怀疑您不想有Tree
和Point
的两个不同类型的参数。您写的方式是,Point
的T
遮蔽了Tree
的T
,因此参数实际上是不同的。如果您希望它们相同,请删除内部类的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();