2015-05-20 2 views
-1
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    The operator + is undefined for the argument type(s) java.lang.Integer, 
    java.lang.Integer 

    at TestClass.Print3.main(Print3.java:14) 
public class Print3 { 
    public static Integer wiggler(Integer x) { 
     Integer y = x+10; 
     x++; 
     System.out.println(x); 

     return y; 
    } 

    public static void main(String[] args) { 
     Integer dataWrapper = new Integer(5); 
     Integer value = wiggler(dataWrapper); 
     System.out.println(dataWrapper+value); 
    } 
} 
+0

общественного класс Print3 {\t общественность статического Целочисленного вигглер (целое число х) { \t Целого число у = х + 10; x ++; System.out.println (x); return y; } public static void main (String [] args) { Integer dataWrapper = new Integer (5); Целочисленное значение = wiggler (dataWrapper); System.out.println (dataWrapper + значение); } } –

+5

Пожалуйста, не добавляйте ваш источник в качестве комментария, отредактируйте его. – reto

+0

Пожалуйста, отредактируйте свой вопрос, чтобы добавить исходный код и ясный вопрос. Чего вы ожидаете? – Kapcash

ответ

0

Попробуйте использовать этот код вместо:

public class Print3 { 
    public static Integer wiggler(Integer x) { 
     Integer y = new Integer(x.intValue() + 10); 
     x = new Integer(x.intValue() + 1); 
     System.out.println(x); 

     return y; 
    } 

    public static void main(String[] args) { 
     Integer dataWrapper = new Integer(5); 
     Integer value = wiggler(dataWrapper); 
     int result = dataWrapper.intValue() + value.intValue(); 
     System.out.println(result); 
    } 
} 

Как уже упоминалось @Eran, я ожидал бы код, чтобы работать без проблем. По-видимому, ваша версия Java задыхается от добавления двух Integer.

+0

Большое спасибо Tim, Я новичок здесь, пожалуйста, воздержитесь от меня, если мне потребуется время, чтобы понять правила и объяснения, данные/заявленные. –

1

Я не видел эту ошибку компиляции раньше, ее очень странно для меня, потому что, как правило, компилятор Java распаковывает объект Integer в тип int primitve и использует добавление.

Я составил свой файл и посмотрите на двоичном коде:

public static void main(java.lang.String[]); 
    descriptor: ([Ljava/lang/String;)V 
    flags: ACC_PUBLIC, ACC_STATIC 
    Code: 
     stack=3, locals=3, args_size=1 
     0: new   #6     // class java/lang/Integer 
     3: dup 
     4: iconst_5 
     5: invokespecial #7     // Method java/lang/Integer."<init>":(I)V 
     8: astore_1 
     9: aload_1 
     10: invokestatic #8     // Method wiggler:(Ljava/lang/Integer;)Ljava/lang/Integer; 
     13: astore_2 
     14: getstatic  #4     // Field java/lang/System.out:Ljava/io/PrintStream; 
     17: aload_1 
     18: invokevirtual #2     // Method java/lang/Integer.intValue:()I 
     21: aload_2 
     22: invokevirtual #2     // Method java/lang/Integer.intValue:()I 
     25: iadd 
     26: invokevirtual #9     // Method java/io/PrintStream.println:(I)V 
     29: return 
     LineNumberTable: 
     line 11: 0 
     line 12: 9 
     line 13: 14 
     line 14: 29 
} 

Я опустил неинтересный двоичный код, потому что interessting часть находится в главном методе. Что я хочу вам показать, так это то, что компилятор Java автоматически распакует класс Wrapper в примитивный тип int с вызовом Method java/lang/Integer.intValue :() I в строке 18 и 22 после этого добавление будет казнены.

Так что другие ответы не помогут ни тем, ни другим.

Предлагаю использовать другой компилятор Java, соответственно обновляя ваш jdk и пытаюсь его компилятор на другой машине.

Вы также можете проверить свой код на ideone, и, как видите, он отлично работает.

http://ideone.com/9tJYf1

Смежные вопросы