Вниз  Java-программирование (1-ые посты)
- 1.04.2015 / 06:15
garfild63
  Пользователь

garfild63 
Сейчас: Offline
А java-компилятор онлайн? :?
- 1.04.2015 / 14:19
ВитаминКО
  Супермодератор

ВитаминКО 
Сейчас: Offline
Цитата garfild63:
А java-компилятор онлайн? :?
вымерли
__________________
 わからない!!
- 1.04.2015 / 14:22
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
__________________
 let live
- 2.04.2015 / 11:13
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Интересно, заметил, что метод
  1. private static void method(Type... types) { }
имеет флаг varargs, что логично - надо же отличать T... от T[]. Но кроме того, существуют ещё флаги synthetic и bridge. И если с первым всё понятно, то второй я так нигде и не увидел.

Гугление вывело на статью http://www.informit.com/articles/article.aspx?p=2025637&seqNum=8 про Type Erasure. И там встретился пример:
Открыть спойлер

После компиляции, информация о generics стирается.

1 из 2Сравнение Node
Было
  1. public class Node<T> {
  2.     private T data;
  3.     public Node(T data) { this.data = data; }
  4.  
  5.     public void setData(T data) {
  6.         System.out.println("Node.setData");
  7.         this.data = data;
  8.     }
  9. }

1 из 2Сравнение MyNode
Было
  1. public class MyNode extends Node<Integer> {
  2.  
  3.     public MyNode(Integer data) { super(data); }
  4.  
  5.     @Override
  6.     public void setData(Integer data) {
  7.         System.out.println(data);
  8.         super.setData(data);
  9.     }
  10. }

В классе MyNode появился ещё один метод, называемый bridge method, который имеет модификаторы bridge synthetic:
javap -v MyNode.class
  1. public void setData(java.lang.Integer);
  2.   descriptor: (Ljava/lang/Integer;)V
  3.   flags: ACC_PUBLIC
  4.  
  5. public void setData(java.lang.Object);
  6.   descriptor: (Ljava/lang/Object;)V
  7.   flags: ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC

__________________
 let live

Изменено aNNiMON (2.04 / 11:15) (всего 1 раз)
- 2.04.2015 / 13:11
Oak
  Пользователь

Oak 
Сейчас: Offline
aNNiMON, интересно, только пример, по-моему, не разъясняет «зачем».
__________________
 Эль Презеденте
- 2.04.2015 / 14:37
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
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
  Пользователь

Oak 
Сейчас: Offline
aNNiMON, а, понял зачем :facepalm: Чтобы если к объекту обратиться как к Node, то вызвался перегруженный метод из реализации.
__________________
 Эль Презеденте
- 2.04.2015 / 15:38
garfild63
  Пользователь

garfild63 
Сейчас: Offline
aNNiMON, Как в первом компиляторе добавить поля для сорц-файлов, а то их там очень мало, всего 5? :?
- 2.04.2015 / 18:36
ВитаминКО
  Супермодератор

ВитаминКО 
Сейчас: Offline
garfild63, ты же нетбинс собирался ставить, зачем онлайн компилятор
__________________
 わからない!!
- 2.04.2015 / 20:13
garfild63
  Пользователь

garfild63 
Сейчас: Offline
ВитаминКО, Я это на всякий случай. Вдруг нетбинс не получится установить.
Наверх  Всего сообщений: 16875
Фильтровать сообщения
Поиск по теме
Файлы топика (794)