| 
 | 
| 
 
Забавное поведение method reference 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Всем привет! Наткнулся на такой фокус покус. есть два класса - предок и потомок (в РАЗНЫХ ПАКЕТАХ, это важно): Код: java 1. 2. 3. 4. 5. Код: java 1. 2. 3. 4. 5. 6. 7. 8. запускаем тест: Код: java 1. получаем исключение: java.lang.BootstrapMethodError: java.lang.IllegalAccessError: tried to access method com.p.Parent.getString()Ljava/lang/String; from class com.Child$Value хмм.., теперь следим за руками, меняем method reference Код: java 1. на lambda Код: java 1. т.е. получается Код: java 1. 2. 3. 4. 5. 6. 7. 8. запускаем тест - все работает! выходит method reference и lambda не совсем одно и то же? печалька.. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 03.03.2021, 00:57 | 
  
  
  
   | 
||
| 
 
Забавное поведение method reference 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Поправил ваш пример до компилируемого состояния (все три класса - в разных пакетах):   Parent.java  Код: java 1. 2. 3. 4. 5. 6.   Child.java  Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.   Main.java  Код: java 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. 4. 5. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 03.03.2021, 07:58 | 
  
  
  
   | 
||
| 
 
Забавное поведение method reference 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Basil A. Sidorov, спасибо! так у вас воспроизвелось? если именно не с лямбдой, а с method reference? Я такой нюанс уже второй раз наблюдаю, первый раз было несколько лет назад, на другом примере. Как это происходит, видишь такой в коде лямбду, IDEA предлагает заменить на reference. Ну и ты такой меняешь, что такого. А ошибка потом в runtime происходит, ты даже об этом узнать можешь намного позже. Сейчас мне юнит тесты помогли, так что я сразу заметил. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 03.03.2021, 12:26 | 
  
  
  
   | 
||
| 
 
Забавное поведение method reference 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  По моему, тексты классов достаточно короткие, чтобы понять: нет, не воспроизвелось. Ну или ткнуть пальцев те места кода, которые отличаются от вашей задумки. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 03.03.2021, 12:32 | 
  
  
  
   | 
||
| 
 
Забавное поведение method reference 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Basil A. Sidorov, сейчас только заметил, вы заменили внутренний класс Value на метод Value. Вот поправленные примеры:  Parent.java  Код: java 1. 2. 3. 4. 5. 6.  Child.java  Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.  Main  Код: java 1. 2. 3. 4. 5. 6. должно свалиться на Код: java 1. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 03.03.2021, 15:50 | 
  
  
  
   | 
||
| 
 
Забавное поведение method reference 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  ну а если method reference заменить на lambda - то все рабоатет ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 03.03.2021, 15:51 | 
  
  
  
   | 
||
| 
 
Забавное поведение method reference 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  rabiter выходит method reference и lambda не совсем одно и то же? Нет, не одно и то же ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 03.03.2021, 16:21 | 
  
  
  
   | 
||
| 
 
Забавное поведение method reference 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Псевдомизантроп, да, похоже на то. Лямбда понятно - создает анонимную имплементацию интерфейса, в принципе, ничего нового, просто синтаксис. А я наивный думал method reference тоже так же имплементирован. Походу нет. И самая подстава, что такая ошибка-то runtime а не compile. А IDEA такая: не хочешь немного method reference вместо лямбд?)) ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 03.03.2021, 16:57 | 
  
  
  
   | 
||
| 
 
Забавное поведение method reference 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Бага(?) javac JVM8:   чуть подрезал комстроку javac JVM11  Код: plaintext Код: plaintext 1. 2. 3. 4. 5. 6. 7. P.S. Реализация лямбд отдаётся "на откуп" разработчикам JDK/JVM: могут сделать так, могут - сяк. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 03.03.2021, 18:53 | 
  
  
  
   | 
||
| 
 
Забавное поведение method reference 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Basil A. Sidorov Бага(?) javac JVM8:    чуть подрезал комстроку javac JVM11  Код: plaintext Код: plaintext 1. 2. 3. 4. 5. 6. 7. P.S. Реализация лямбд отдаётся "на откуп" разработчикам JDK/JVM: могут сделать так, могут - сяк. ну может быть и бага в JVM... у меня тоже восьмерка, не проверял на других версиях Код: plaintext 1. 2. 3. может выложу баг, куда бы написать только, надо погуглить) ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 03.03.2021, 23:08 | 
  
  
  
   | 
||
| 
 
Забавное поведение method reference 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Тестовый пример, если вы не заметили, успешно запустился под Java 8. Байткод создавал javac из jdk11, но с -target 8. Следовательно, проблема не в вашем примере и не в JVM Java 8, а в javac jdk8. Замечу, что есть ещё и ecj и OpenJ9, но мне уже в ломы ковырять дальше. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 04.03.2021, 08:26 | 
  
  
  
   | 
||
| 
 | 

start [/forum/topic.php?fid=59&msg=40050491&tid=2120513]:  | 
    0ms | 
get settings:  | 
    12ms | 
get forum list:  | 
    14ms | 
check forum access:  | 
    4ms | 
check topic access:  | 
    4ms | 
track hit:  | 
    47ms | 
get topic data:  | 
    11ms | 
get forum data:  | 
    2ms | 
get page messages:  | 
    43ms | 
get tp. blocked users:  | 
    1ms | 
| others: | 14ms | 
| total: | 152ms | 

| 0 / 0 | 

На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даете согласие с использованием данных технологий.