如何将int转换为泛型类型T.

时间:2014-09-12 21:18:11

标签: java class generics

我有一个泛型类。

因为我使用泛型,所以使用addNode( )在Mylist上添加我想要的任何类型的对象都很容易。但是,如果我想在课堂上添加(int) 5 。我怎么能这样做? (例如,参见以下代码中的注释)。

class MyList <T>
{
    Node <T> head = null;
    public void addNode(T element) {
        head = new Node <T> (element);
    }
    //Other methods removed for simplicity

    public void myMethod () {
        MyList <T> newList = new MyList <T>();

        //Below code generate error: required: T, found: int 
        newList.addNode(5);  //How to add an int 5 here when it is expecting Type:T?
    }
}

class Node <T>
{
    T element;
    public Node(T item) 
    { 
        element = item; 
    }
    //Other methods removed for simplicity
}

1 个答案:

答案 0 :(得分:5)

class MyList<T> {
    // ...

    public void addNode(T element) {
        // ...
    }

    public void myMethod() {
        MyList<T> newList = new MyList<T>();

        newList.addNode(5);  // <- can't do that!
    }
}

如果你可以在那里添加一个整数,那么该类将不再是通用的。它会打败目的。

在使用MyList的此类之外的方法中,您可以执行此操作:

void another() {
    MyList<Integer> list = new MyList<Integer>();
    list.addNode(5);

    MyList<String> list2 = new MyList<String>();
    list.addNode("hello");
}

<强>更新

  

如果我需要将Integer和Nodes对象添加到列表中怎么办?我们有什么方法可以做到吗?

可以这样做,但是,模板参数变得毫无意义,你正在失去正确的类型检查功能。通常你不应该这样做。

MyList<Object> list3 = new MyList<Object>();
list3.addNode(12);
list3.addNode("heya");