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();
我怀疑您不希望 Tree
和 Point
有两个不同类型的参数。你这样写,Point
的T
把Tree
的T
给遮住了,所以参数其实是不一样的。如果你想让它们一样,去掉里面的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
对象中的方法,你应该使用它
我正在尝试实例化一个 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();
我怀疑您不希望 Tree
和 Point
有两个不同类型的参数。你这样写,Point
的T
把Tree
的T
给遮住了,所以参数其实是不一样的。如果你想让它们一样,去掉里面的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
Point
可能性 2 删除 Point
public class Tree<T> {
public class Point {
public T position[];
}
}
如果你想要 Tree
到 return 类型 T