Size: a a a

2021 March 05

HH

Human Human in pro.jvm
Рефлекшн либо ручной каст как я понимаю?
источник

D

DarkPerl in pro.jvm
Human Human
Подскажите плиз по дженерикам. Как мне реализовать то, что я хочу. Компилятор выкидывает ошибку.
Это только через рефлексию возможно?
https://pastebin.com/T2UQSQRP

```class Example{
   
interface Interface<Type>{
       
void handle(Type t);
   }
   
Map<Class<?>, Interface<?>> items = new HashMap<>();
   
//ТУТ НУЖНО ЧЕКАТЬ ДОБАВЛЯЕМЫЙ ТИП
   
<Type> void add(Class<Type> typeClass, Interface<Type> typeInterface){
       items.put(typeClass, typeInterface);
   }
   
void handle(){
       
//ТУТ !!!ОШИБКА!!!
       //error: incompatible types: Object cannot be converted to CAP#1  items.get(String.class).handle(new Object());
       //КАК МНЕ РЕАЛИЗОВАТЬ ТО, ЧТО Я ХОЧУ?
       
items.get(String.class).handle(new Object());
   }
}
```
источник

IZ

Ivan Zemlyankiy in pro.jvm
Ivan Zemlyankiy
вроде тут есть гонка же, да?
в общем, если кому интересно, то вот ответ:
может ли поток, который делает thenApply, увидеть my = 0? нет, не может, потому что инстанс лямбды захватывает это значение в своё final-поле

т.е. то что выше - это эквивалент чего-то типа такого:
    CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> 42);
   int my = 123;
   future.thenApply(new MyFunc(my));
где MyFunc - это сгенерированная компилятором лямбда в похожая на
private static class MyFunc implements Function<Integer, Integer> {
   private final int my;

   private MyFunc(int my) {
     this.my = my;
   }

   @Override
   public Integer apply(Integer it) {
     return it + my;
   }
 }
источник

VS

Vladimir S in pro.jvm
Human Human
Рефлекшн либо ручной каст как я понимаю?
Метод обёртку get сделать можно и там безопасно кастить
источник

VS

Vladimir S in pro.jvm
Ivan Zemlyankiy
в общем, если кому интересно, то вот ответ:
может ли поток, который делает thenApply, увидеть my = 0? нет, не может, потому что инстанс лямбды захватывает это значение в своё final-поле

т.е. то что выше - это эквивалент чего-то типа такого:
    CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> 42);
   int my = 123;
   future.thenApply(new MyFunc(my));
где MyFunc - это сгенерированная компилятором лямбда в похожая на
private static class MyFunc implements Function<Integer, Integer> {
   private final int my;

   private MyFunc(int my) {
     this.my = my;
   }

   @Override
   public Integer apply(Integer it) {
     return it + my;
   }
 }
Вроде стандартно, сама идея должна предложить в атомик референс обернуть переменную, которую нужно менять
источник

IZ

Ivan Zemlyankiy in pro.jvm
Vladimir S
Вроде стандартно, сама идея должна предложить в атомик референс обернуть переменную, которую нужно менять
ну её не нужно менять
источник

IZ

Ivan Zemlyankiy in pro.jvm
вопрос был про безопасную публикацию
источник

DP

Denis Pavlyuchenko in pro.jvm
Ivan Zemlyankiy
в общем, если кому интересно, то вот ответ:
может ли поток, который делает thenApply, увидеть my = 0? нет, не может, потому что инстанс лямбды захватывает это значение в своё final-поле

т.е. то что выше - это эквивалент чего-то типа такого:
    CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> 42);
   int my = 123;
   future.thenApply(new MyFunc(my));
где MyFunc - это сгенерированная компилятором лямбда в похожая на
private static class MyFunc implements Function<Integer, Integer> {
   private final int my;

   private MyFunc(int my) {
     this.my = my;
   }

   @Override
   public Integer apply(Integer it) {
     return it + my;
   }
 }
пришлось байт код поизучать, чтобы дойти до этого ответа?) или какой-то проще путь
источник

.

... in pro.jvm
@javastart , да
источник

IZ

Ivan Zemlyankiy in pro.jvm
Denis Pavlyuchenko
пришлось байт код поизучать, чтобы дойти до этого ответа?) или какой-то проще путь
источник

IZ

Ivan Zemlyankiy in pro.jvm
Denis Pavlyuchenko
пришлось байт код поизучать, чтобы дойти до этого ответа?) или какой-то проще путь
Есть один парень =)
источник

DP

Denis Pavlyuchenko in pro.jvm
Ivan Zemlyankiy
Есть один парень =)
а.. хорошо, когда есть один парень)
источник

IZ

Ivan Zemlyankiy in pro.jvm
источник

IZ

Ivan Zemlyankiy in pro.jvm
Пришлось помолиться )
источник

IZ

Ivan Zemlyankiy in pro.jvm
Denis Pavlyuchenko
а.. хорошо, когда есть один парень)
Но, кстати, тема с байткодом интересная, надо сделать
источник

SI

Sagid Irkkuev in pro.jvm
Ребята, Чем заменять такой код?

if getStatus == 0 {...}
else if getStatus == 1 {...}

и так до 100..

Есть хорошее решение?
источник

А

Алексей in pro.jvm
Switch
источник

А

Алексей in pro.jvm
А еще интересно что там в скобках может быть
источник

YM

Yuri M in pro.jvm
Если в скобках много всего — HashMap со с кодами и значения-стратегии для обработки сценариев
источник

SI

Sagid Irkkuev in pro.jvm
Алексей
Switch
switch, как по мне без разницы, забудь break, вообще беда.
источник