1.04.2015 / 06:15 | |
garfild63 Пользователь Сейчас: Offline
Имя: Антон Откуда: Новороссийск Регистрация: 26.08.2014
| А java-компилятор онлайн? |
1.04.2015 / 14:19 | |
ВитаминКО Супермодератор Сейчас: Offline
Имя: Василиус Откуда: RZN Регистрация: 20.04.2012
| Цитата garfild63: А java-компилятор онлайн? вымерли __________________
わからない!! |
2.04.2015 / 11:13 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| Интересно, заметил, что метод private static void method(Type... types) { }
имеет флаг varargs, что логично - надо же отличать T... от T[]. Но кроме того, существуют ещё флаги synthetic и bridge. И если с первым всё понятно, то второй я так нигде и не увидел. Гугление вывело на статью http://www.informit.com/articles/article.aspx?p=2025637&seqNum=8 про Type Erasure. И там встретился пример: Открыть спойлер Закрыть спойлер public class Node<T> {
private T data;
public Node(T data) { this.data = data; }
public void setData(T data) {
System.out.println("Node.setData");
this.data = data;
}
}
public class MyNode extends Node<Integer> {
public MyNode(Integer data) { super(data); }
@Override
public void setData(Integer data) {
System.out.println(data);
super.setData(data);
}
}
После компиляции, информация о generics стирается. 1 из 2 | Сравнение Node |
Было
public class Node<T> {
private T data;
public Node(T data) { this.data = data; }
public void setData(T data) {
System.out.println("Node.setData");
this.data = data;
}
}
Стало
public class Node {
private Object data;
public Node(Object data) { this.data = data; }
public void setData(Object data) {
System.out.println("Node.setData");
this.data = data;
}
}
1 из 2 | Сравнение MyNode |
Было
public class MyNode extends Node<Integer> {
public MyNode(Integer data) { super(data); }
@Override
public void setData(Integer data) {
System.out.println(data);
super.setData(data);
}
}
Стало
public class MyNode extends Node {
public MyNode(Integer data) { super(data); }
public void setData(Integer data) {
System.out.println(data);
super.setData(data);
}
public {bridge synthetic} void setData(Object obj) {
setData((Integer)obj);
}
}
В классе MyNode появился ещё один метод, называемый bridge method, который имеет модификаторы bridge synthetic: javap -v MyNode.classpublic void setData(java.lang.Integer);
descriptor: (Ljava/lang/Integer;)V
flags: ACC_PUBLIC
public void setData(java.lang.Object);
descriptor: (Ljava/lang/Object;)V
flags: ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC
__________________
let live Изменено aNNiMON (2.04 / 11:15) (всего 1 раз) |
2.04.2015 / 13:11 | |
Oak Пользователь Сейчас: Offline
Имя: Коля Откуда: Москва Регистрация: 02.06.2010
| aNNiMON, интересно, только пример, по-моему, не разъясняет «зачем».
__________________
Эль Презеденте |
2.04.2015 / 14:37 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| Oak, я и сам бы хотел это знать. Думаю, bridge method появляется как следствие Type Erasure, чтобы соответствовать сигнатуре наследуемого класса (node.setData(Object) - mynode.setData(Object)), а флаг Bridge, видимо, значит что-то для JVM. Но вообще этот пост был написан с целью обратить внимания на флаги.
__________________
let live Изменено aNNiMON (2.04 / 14:40) (всего 2 раза) |
2.04.2015 / 15:35 | |
Oak Пользователь Сейчас: Offline
Имя: Коля Откуда: Москва Регистрация: 02.06.2010
| aNNiMON, а, понял зачем Чтобы если к объекту обратиться как к Node, то вызвался перегруженный метод из реализации. __________________
Эль Презеденте |
2.04.2015 / 15:38 | |
garfild63 Пользователь Сейчас: Offline
Имя: Антон Откуда: Новороссийск Регистрация: 26.08.2014
| aNNiMON, Как в первом компиляторе добавить поля для сорц-файлов, а то их там очень мало, всего 5? |
2.04.2015 / 18:36 | |
ВитаминКО Супермодератор Сейчас: Offline
Имя: Василиус Откуда: RZN Регистрация: 20.04.2012
| garfild63, ты же нетбинс собирался ставить, зачем онлайн компилятор
__________________
わからない!! |
2.04.2015 / 20:13 | |
garfild63 Пользователь Сейчас: Offline
Имя: Антон Откуда: Новороссийск Регистрация: 26.08.2014
| ВитаминКО, Я это на всякий случай. Вдруг нетбинс не получится установить.
|