Size: a a a

2020 March 31

Y

Yuriy in learn.java
elefus
Это можно сделать двумя способами:

Со статической типизацией (чтобы корректность передаваемого метода и параметров проверял компилятор). В таком случае вам подойдет механизм method reference. Используется он следующим образом - вы определяете сигнатуру метода FOO (т.е. его входные и выходной параметр), который планируете принимать в качестве аргумента в методе BAR. Ищите среди существующих функциональных интерфейсов подходящий, или же пишите свой при необходимости. Объявляете в методе BAR параметр выбранного типа (например BiFunction<String, Integer>). Далее в коде при вызове метода BAR передаете ему ссылку на конкретную реализацию - BAR(MyClass::FOO).

Рантайм передача метода с использованием рефлексии. BAR на вход принимает объект класса java.lang.Method а внутри вы вызываете method.invoke(ref, args...) где в качестве первого параметра - объект, на котором будет вызван метод а в качестве второго - набор аргументов, которые ему будут переданы.

Первый вариант предпочтительнее в силу своей типизации, более явного поведения и возможности использования многих фич IDE.
interface Sayable{  
   void say();  
}  
public class MethodReference {  
   public static void saySomething(){  
       System.out.println("Hello, this is static method.");  
   }  
   public static void main(String[] args) {  
       // Referring static method  
       Sayable sayable = MethodReference::saySomething;  
       // Calling interface method  
       sayable.say();  
   }  
}  

это оно ?
источник

Y

Yuriy in learn.java
источник

e

elefus in learn.java
да, это один из варинтов
источник

e

elefus in learn.java
лучше официальную доку все-же =)
источник

e

elefus in learn.java
источник

Y

Yuriy in learn.java
да. я читал это.. но такм как-то не так понятно пример сделан.  то что я скинул мне понятнее.. я просто не программист..
источник

Y

Yuriy in learn.java
а притворяюсь им )
источник

e

elefus in learn.java
Yuriy
основная цель - убрать дублирование кода. повышая таким образом его переиспользование.
а оно вам сильно надо?
реально есть вероятность переиспользования этого кода в виде отдельных компонентов?

не раз доводилось встречаться с кодом, который значительно переусложняли с целью оптимизации / переиспользования, при том что использовался он максимум три раза в отдельно стоящем компоненте
источник

e

elefus in learn.java
в итоге в коде без поллитры не разберешься а уж модификация его превращается в таинственный ритуал с поиском всех мест, в которых это может выстрелить, потому что базовый класс делает что-то, наследники делают что-то и вот тот, стоящий в стороне, оказывается инжектится сюда, привнося свою логику
источник

Y

Yuriy in learn.java
elefus
а оно вам сильно надо?
реально есть вероятность переиспользования этого кода в виде отдельных компонентов?

не раз доводилось встречаться с кодом, который значительно переусложняли с целью оптимизации / переиспользования, при том что использовался он максимум три раза в отдельно стоящем компоненте
на данный момент дублируется в 16 классах. количество классов будет расти.
источник

Y

Yuriy in learn.java
у меня только 1 базовый класс от которого создаются наследники так сказать дети.. внуков нет и не будет.
источник

Y

Yuriy in learn.java
и каждом так сказать сыне надо чтобы делалось определеная операция.
источник

Y

Yuriy in learn.java
мне кажется что применение такого подхода  уместно.
источник

Y

Yuriy in learn.java
спасибо за помощь.
источник

Р

Ролан in learn.java
всем привет, кто писал телеграмм-бота, можете помочь?
источник

Р

Ролан in learn.java
выдаёт вот такое
источник

MR

Muzaffar Rasulov in learn.java
ребят как в Спринг Шедулере указать время динамически? т.е. запускать таск исходя от текущее время к примеру если время запуска проекта 14-49 то таск должен сработать в 15-00 если 14-44 то в 14-45
источник

e

elefus in learn.java
Muzaffar Rasulov
ребят как в Спринг Шедулере указать время динамически? т.е. запускать таск исходя от текущее время к примеру если время запуска проекта 14-49 то таск должен сработать в 15-00 если 14-44 то в 14-45
@Scheduled(initialDelay = XXXms)
источник

e

elefus in learn.java
Ролан
выдаёт вот такое
так перейдите по стектрейсу и посмотрите где падает)
судя по всему передается null в качестве DefaultBotOptions при инициализации
источник

e

elefus in learn.java
собственно 46 строка на скрине
источник