将对象转换为泛型(或将内部类变量存储为泛型)

时间:2013-12-09 08:00:11

标签: java generics casting inner-classes

当我尝试从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;
    }
}

1 个答案:

答案 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;
    }
}