当我尝试从Object转换为泛型类型时,我收到警告。
由于我的内部Node类上的底层数据结构是一个数组,因此我无法创建泛型,因为我无法创建泛型数组,因此我的val
参数必须是一个Object。 / p>
是否有任何解决方法或更好的方法?我可以压制警告,但我不确定这是否会引起我应该关注的后果。
我也在制作实现MyTreeI的不同树,并且都会有不同的节点结构(所以我不能制作一个真正的Node类(甚至可以工作吗?我不知道..也许))
此处的代码:
public class MyTree<E> implements MyTreeI<E> {
private Node root; // root of tree
private static class Node {
private Object val;
private Node[] children = new Node[2];
}
public MyTree() {
}
@Override
public E get(String key) {
Node x = getNode(key); // helper function, assume it returns node in question
return (E) x.val;
}
}
答案 0 :(得分:1)
我无法创建Node泛型,因为我无法创建泛型数组
使Node
泛型不会阻止您使用Node
数组。你无法创建new Node<E>[...]
,true;但您可以创建new Node<?>[...]
或new Node[...]
并将其投放到Node<E>[]
,或者只需将children
的类型更改为Node<?>[]
。有很多种方法可以做到这一点。
public class MyTree<E> implements MyTreeI<E> {
private Node<E> root; // root of tree
private static class Node<E> {
private E val;
private Node<E>[] children = (Node<E>[])new Node<?>[2];
}
public MyTree() {
}
@Override
public E get(String key) {
Node<E> x = getNode(key); // helper function, assume it returns node in question
return x.val;
}
}