powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Разница в поведении java 6 и java 7 (type inference difference)
8 сообщений из 8, страница 1 из 1
Разница в поведении java 6 и java 7 (type inference difference)
    #38604198
ales111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Объясните, пожалуйста, почему в том же самом коде в java 6 вызывается один метод (дженериковый), а в java 7 - другой (не дженериковый)?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class Main
{
  public static void main(String[] args)
  {
    TestClass.method(1);
    TestClass.method(Integer.valueOf(2));
    TestClass.<Integer>method(3);
  }
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public class TestClass<T>
{
  public static  <T> void method(T i)
  {
    System.out.println(String.valueOf(i) + ": generic+");
  }

  public static void method(int i)
  {
    System.out.println(String.valueOf(i) + ": generic-");
  }
}



Вывод при использовании java 6:
1: generic-
2: generic+
3: generic+

Вывод при использовании java 7:
1: generic-
2: generic+
3: generic-

Код один и тот же. В чем причина такой разницы в поведении?
...
Рейтинг: 0 / 0
Разница в поведении java 6 и java 7 (type inference difference)
    #38604236
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разница не совсем "в поведении", а в компиляции. Посмотрите Java Language Specification раздел 15.12.2
http://docs.oracle.com/javase/specs/jls/se5.0/html/expressions.html#15.12.2
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.2

Он поменялся для JSE 7.
...
Рейтинг: 0 / 0
Разница в поведении java 6 и java 7 (type inference difference)
    #38604385
eJack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczРазница не совсем "в поведении", а в компиляции. Посмотрите Java Language Specification раздел 15.12.2
http://docs.oracle.com/javase/specs/jls/se5.0/html/expressions.html#15.12.2
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.2

Он поменялся для JSE 7.

Меня всегда удивляет как вы ориентируетесь в спеках - когда вы успеваете их читать???
...
Рейтинг: 0 / 0
Разница в поведении java 6 и java 7 (type inference difference)
    #38604410
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eJackМеня всегда удивляет как вы ориентируетесь в спеках - когда вы успеваете их читать???
А что там ориентироваться? Проблема в overload. Открыл содержание. Пробежался поиском по overload. Нашел где описывается выбор методов.
...
Рейтинг: 0 / 0
Разница в поведении java 6 и java 7 (type inference difference)
    #38604500
ales111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответ!
Вы правы, это разница на уровне компиляции. Сравнил байткод:
в java 6 код кейса 3 = код кейса 2, компилятор сам прикручивает автобоксинг вида Integer.valueOf(...)
Код: java
1.
2.
3.
    ICONST_3
    INVOKESTATIC java/lang/Integer.valueOf (I)Ljava/lang/Integer;
    INVOKESTATIC com/company/TestClass.method (Ljava/lang/Object;)V


в java 7 код кейса 3 = код кейса 1, автобоксинга нету
Код: java
1.
2.
    ICONST_3
    INVOKESTATIC com/company/TestClass.method (I)V



Посмотрел спецификации, но не могу найти пункт в котором отличие. Можете подсказать точное место в спецификации или шаг на котором это отличие существует?
...
Рейтинг: 0 / 0
Разница в поведении java 6 и java 7 (type inference difference)
    #38604513
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ales111Вы правы, это разница на уровне компиляции. Сравнил байткод:

Можно было просто скомпилять в Java 6 и запустить в Java 7.
...
Рейтинг: 0 / 0
Разница в поведении java 6 и java 7 (type inference difference)
    #38604547
ales111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторМожно было просто скомпилять в Java 6 и запустить в Java 7.
так бы не получилось увидеть, какой байткод генериться при компиляции в Java 7, а вообще это было для эксперимента

важнее этот вопрос:
авторМожете подсказать точное место в спецификации или шаг на котором это отличие существует?
можете на него ответить? спасибо
...
Рейтинг: 0 / 0
Разница в поведении java 6 и java 7 (type inference difference)
    #38604550
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ales111можете на него ответить? спасибо
Ищу. Может действительно бага.
Вот похожая, но не она.
http://bugs.java.com/view_bug.do?bug_id=6182950
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Разница в поведении java 6 и java 7 (type inference difference)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]