1

我的目标是通过任何方式简单地将我的 int 解释为 Integer,没有变通办法

我有一个对象Node<T> (int Key, T value)

我正在开发一个可以正确使用泛型的程序,现在我只希望它使用整数。但是我不能制作Node<int>,我必须使用Node<Integer>

我不知道如何Integer从控制台读取 an,我知道如何读取 only int

代码

public void addNumber (int number) {
   Node<Integer> newNode = new Node<Integer>(number,(Integer)number); //does not work
   this.gd.add(newNode);                                       
}

我尝试了什么:

Integer iNumb = new Integer(number);   // Could not instantiate the type integer

和:

Node<Integer> newNode = new Node<Integer>(number, number);

我没有为此的构造函数,走那条路毫无意义。

我也试过这个:

public void addNumber() throws GenericDictionary_exception {
    Scanner input = new Scanner(System.in);
    int number;
    System.out.print("Number: ");

    if (input.hasNextInt()) { 
    number = input.nextInt();
    } else
    throw new GenericDictionary_exception(
              "Error\n\t**This version only supports input of numbers**");
    
    Integer integer = number; // Type missmatch
    }

如果泛型在 Java 中起作用,我如何int将其转换为?Integer

 int num = 5;
 Integer integer = num;

这样可行。

4

1 回答 1

1

假设 number 是一个 int:

Integer myInteger = number;

Java 泛型有一些限制,其中之一是您不能使用原语,而必须使用 Java 的原语包装类。

这是一个更复杂的解释:

为什么 Java 泛型不支持原始类型?

编辑:

为了清楚起见,我假设您的 Node 类看起来像这样:

public class Test {
    public static void main(String[] args) {
        int number = 2;
        Integer myInteger = number;
        Node<Integer> myNode = new Node<Integer>(number, number);
        System.out.println(myNode.getValue());
    }

    public static class Node<T> {
        private int key;
        private T value;

        public Node(int key, T value) {
            this.key = key;
            this.value = value;
        }

        public T getValue() {
            return value;
        }
    }    
}

我的建议是尝试编译和运行这个测试代码。如果它不起作用,那么你的环境有问题。如果它确实有效,那么问题可能与我们没有看到的代码有关。

编辑2:

这对我有用。同样,我建议将其作为独立程序尝试:

public class Test {
    public static void main(String[] args) throws Exception {
        addNumber();
    }

    public static void addNumber() throws Exception {
        Scanner input = new Scanner(System.in);
        int number;
        System.out.print("Number: ");

        if (input.hasNextInt()) {
            number = input.nextInt();
        } else {
            throw new Exception(
                "Error\n\t**This version only supports input of numbers**");
        }

        Integer integer = number; // Type missmatch
        System.out.println(integer);
    }
}
于 2012-12-13T19:51:28.010 回答