1

私の目標は、単にintを取得し、それを整数トラフとして解釈することです。回避策はありません。

オブジェクトがありますNode<T> (int Key, T value)

私はジェネリックスを適切に使用できるプログラムに取り組んでいますが、今のところは整数を使用したいだけです。しかし、私は作ることができませんNode<int>、私は使用しなければなりませんNode<Integer>

Integerコンソールからの読み取り方法がわかりません。読み取り専用の方法がわかります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

数値が整数であると仮定します。

Integer myInteger = number;

Javaジェネリックにはいくつかの制限があり、そのうちの1つは、プリミティブを使用できないことです。代わりに、Javaのプリミティブラッパークラスを使用する必要があります。

より複雑な説明は次のとおりです。

Java Genericsがプリミティブ型をサポートしないのはなぜですか?

編集:

明確にするために、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 に答える