Аннотация:
Выход проекта под кодовым именем Tiger на сегодняшний день – одно из самых ожидаемых событий в мире Java 2. Новая версия, 1.5, – это не просто ещё одна единичка в номере версии, это ряд революционных новшеств, которых, наверное, не было со времен появления Java 2. В этой статье будут рассмотрены основные из них.
Здравствуйте, Ноздреватых Ростислав aka Blazkowicz, Вы писали:
НРA>Статья:
НРA>Авторы: НРA> Ноздреватых Ростислав aka Blazkowicz
НРA>Аннотация: НРA>Выход проекта под кодовым именем Tiger на сегодняшний день – одно из самых ожидаемых событий в мире Java 2. Новая версия, 1.5, – это не просто ещё одна единичка в номере версии, это ряд революционных новшеств, которых, наверное, не было со времен появления Java 2. В этой статье будет рассмотрены основные из них.
Собственно здесь все это написано, но на английском правда.
Здравствуйте, Ноздреватых Ростислав aka Blazkowicz, Вы писали:
А можно несколько вопросов от человека поверхостно разбирающегося в Java, но старающегося следить, что там происходит ?
1. Автобоксинг
Кроме этого, числовые операции теперь можно производить, не доставая из обертки значение:
Integer b = 10;
b++;
А разве раньше так нельзя было ?
2. Метаданные
Честно говоря так и не понял, в чем здесь смысл
Информацию о методах класса, его парамертрах и типе возвращаемого значения можно было и раньше получить через reflection.
Что нового дают метаданные ?
Здравствуйте, DemAS, Вы писали:
DAS> 1. Автобоксинг
DAS>
DAS> Кроме этого, числовые операции теперь можно производить, не доставая из обертки значение:
DAS> Integer b = 10;
DAS> b++;
DAS>
DAS> А разве раньше так нельзя было ?
Раньше — нельзя. int — базовый тип. Для работы с целочисленными значениями. Integer — класс-обертка над этим базовым типом. В Тигре попытались стереть разницу между ними. Производить операции непосредственно над обертками раньше нельзя было.
DAS> 2. Метаданные
DAS> Честно говоря так и не понял, в чем здесь смысл DAS> Информацию о методах класса, его парамертрах и типе возвращаемого значения можно было и раньше получить через reflection. DAS> Что нового дают метаданные ?
Метаданные позволяют добавлять свою собственную информацию. Например хочется написать XML сериализатор. И вместо того чтобы писать дополнительный маппиг. Можно разметить поля класса, какие хочется сериализовать в аттрибуты, какие в элементы и пр.
Или вот часто пример приводят с удаленными вызовами. Раньше как было. Есть класс. Нужно пометить какие методы могут вызываться удаленно. Для этого создавался интерфейс с такими же методами. В 1.5 просто в классе можно пометить эти методы. Хотя мне этот пример до конца не понятен. Все равно ведь на клиенте лучше иметь интерфейс а не такой же класс как на сервере.
Ещё один пример Deprecated это ведь тоже метаданные. Раньше они из java-doc записывались в класс. Можно так же посмотреть стандартные аннотации в JDK. Так на вскидку не вспомню их.
Hello, "Blazkowicz" > > Или вот часто пример приводят с удаленными вызовами. Раньше как было. Есть класс. Нужно пометить какие методы могут вызываться удаленно. Для этого создавался интерфейс с такими же методами. В 1.5 просто в классе можно пометить эти методы. Хотя мне этот пример до конца не понятен. Все равно ведь на клиенте лучше иметь интерфейс а не такой же класс как на сервере. >
Думаю, имеется в виду то, что для сгенерировать нужный интерфейс для клиента можно будет автоматически, на основании тех-же метаданных. В итоге — уменьшается количество сущностей в коде...
Posted via RSDN NNTP Server 1.9 alpha
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, TK, Вы писали:
TK>Думаю, имеется в виду то, что для сгенерировать нужный интерфейс для клиента можно будет автоматически, на основании тех-же метаданных. В итоге — уменьшается количество сущностей в коде...
Здравствуйте, Ноздреватых Ростислав aka Blazkowicz, Вы писали:
НРA>Статья:
НРA>Авторы: НРA> Ноздреватых Ростислав aka Blazkowicz
НРA>Аннотация: НРA>Выход проекта под кодовым именем Tiger на сегодняшний день – одно из самых ожидаемых событий в мире Java 2.
А рефлексия-то у нее с 1.4 не совместима похоже ни бинарно ни синтаксически — щас еще 40 Мб выкачивать (
Здравствуйте, Oval, Вы писали:
O>А рефлексия-то у нее с 1.4 не совместима похоже ни бинарно ни синтаксически — щас еще 40 Мб выкачивать (
Что ты имел ввиду?
В чем заключается несовместимость рефлексии бинарно?
Рефликсия поменялась не значительно. Основные изменения связаны с генериками и метаданными. Код из 1.4 чудесно компилируется в 1.5. В чем не совместимость?
Здравствуйте, Ноздреватых Ростислав aka Blazkowicz, Вы писали:
НРA>Выход проекта под кодовым именем Tiger на сегодняшний день – одно из самых ожидаемых событий в мире Java 2. Новая версия, 1.5, – это не просто ещё одна единичка в номере версии, это ряд революционных новшеств, которых, наверное, не было со времен появления Java 2. В этой статье будут рассмотрены основные из них.
Здравствуйте, iZEN, Вы писали:
ZEN>Изврат. ZEN>Кончилась эпоха чистого компилятора — введён препроцессор. (я не ошибаюсь?)
Да? Как-то не заметил. А откуда сведения?
Здравствуйте, Blazkowicz, Вы писали:
B>Здравствуйте, iZEN, Вы писали:
ZEN>>Изврат. ZEN>>Кончилась эпоха чистого компилятора — введён препроцессор. (я не ошибаюсь?) B>Да? Как-то не заметил. А откуда сведения?
Декомпилировать полученный байт-код не пробовали?
Попробуйте, тогда посмотрим.
Здравствуйте, ilya_ny, Вы писали:
_>в SUN решили выпустить C#-killer путем копирования основных возможностей.
Не. Им суждено слиться в экстазе общей среды.
Re[2]: Крадущийся тигр (Что нас ждет в Java 1.5)
От:
Аноним
Дата:
13.06.04 23:44
Оценка:
Здравствуйте, ilya_ny, Вы писали:
_>в SUN решили выпустить C#-killer путем копирования основных возможностей.
Изначально все было совсем наоборот
Да прибудет с Джавой сила!
Здравствуйте, iZEN, Вы писали:
ZEN>Здравствуйте, Blazkowicz, Вы писали:
B>>Здравствуйте, iZEN, Вы писали:
ZEN>>>Изврат. ZEN>>>Кончилась эпоха чистого компилятора — введён препроцессор. (я не ошибаюсь?) B>>Да? Как-то не заметил. А откуда сведения?
ZEN>Декомпилировать полученный байт-код не пробовали? ZEN>Попробуйте, тогда посмотрим.
Интересно, какой именно байт-код наводит мысли о препроцессоре? И что именно в нем тебе не нравится?
Здравствуйте, iZEN, Вы писали:
ZEN>>>Изврат. ZEN>>>Кончилась эпоха чистого компилятора — введён препроцессор. (я не ошибаюсь?) B>>Да? Как-то не заметил. А откуда сведения?
ZEN>Декомпилировать полученный байт-код не пробовали? ZEN>Попробуйте, тогда посмотрим.
Если ты имеешь ввиду, что в результате компиляции данные о типах теряются. И никакой оптимизации кода не происходит. То может ты и прав. Но это можно показать и без декомпиляции. Простым примером.
List<String> list = new ArrayList<String>();
Object o = list;
List<Integer> l = (List<Integer>) o;
l.add(new Integer(3));
System.out.println(l.get(0));
Генерики в яве это что-то среднее между шаблонами в плюсах и генриками в шарпе. Вот 2 интересные ссылки по теме.
Здравствуйте, dshe, Вы писали:
ZEN>>Декомпилировать полученный байт-код не пробовали? ZEN>>Попробуйте, тогда посмотрим.
D>Интересно, какой именно байт-код наводит мысли о препроцессоре? И что именно в нем тебе не нравится?
Вот, навскидку.
Попробуйте откомпилировать код с новым энумератором (фор-ич, если не ошибаюсь; шаблоны-генерики).
Далее декомпилируйте class-файл.
Что получится? Во что превратится код? Один-в-один, я думаю, вряд ли получится.
(У меня к сожалению нет 1.5, но хочу выяснить некоторые моменты новой версии).
Здравствуйте, iZEN, Вы писали:
ZEN>Здравствуйте, dshe, Вы писали:
ZEN>>>Декомпилировать полученный байт-код не пробовали? ZEN>>>Попробуйте, тогда посмотрим.
D>>Интересно, какой именно байт-код наводит мысли о препроцессоре? И что именно в нем тебе не нравится?
ZEN>Вот, навскидку. ZEN>Попробуйте откомпилировать код с новым энумератором (фор-ич, если не ошибаюсь; шаблоны-генерики). ZEN>Далее декомпилируйте class-файл. ZEN>Что получится? Во что превратится код? Один-в-один, я думаю, вряд ли получится. ZEN>(У меня к сожалению нет 1.5, но хочу выяснить некоторые моменты новой версии).
Я, признаюсь, все равно не понял, что же тебе не понравилось в новом jdk. Но чтобы говорить предментно, приведу пример с циклом for в новом стиле и в старом. Что касается нового синтаксиса, то это не более, чем синтаксический сахар (о чем говирит то, что enumList1 и enumList2 оттранслировались в абсолютно одинаковый байт-код). Тем не менее, я считаю, что for в новом стиле более удобен.
Такой исходник
import java.util.*;
public class Main {
public static void enumList1(List<String> l) {
for(String o: l) {
System.out.println(o);
}
}
public static void enumList2(List<String> l) {
Iterator<String> i = l.iterator();
while(i.hasNext()) {
String o = i.next();
System.out.println(o);
}
}
public static void enumArray1(String[] l) {
for(String o: l) {
System.out.println(o);
}
}
public static void enumArray2(String[] l) {
for(int i=0, n=l.length; i<n; ++i) {
String o = l[ i];
System.out.println(o);
}
}
}
Здравствуйте, dshe, Вы писали:
D>Я, признаюсь, все равно не понял, что же тебе не понравилось в новом jdk.
Генерики которые ими не являются, так как не имеют никакого отношения к runtime (в отличие от того же шарпа). И автобоксинг, которые опять же лишь скрывает от программера то что происходит на самом деле. Вероятно повсеместное его использование может привести к понижению производительности системы. Тот же новый цикл...
Всё действительно наводит на мысли о прекомпиляции.