Сообщение Re: Шаблонный код в Java/Kotlin - возможно ли? от 16.10.2023 16:10
Изменено 16.10.2023 16:12 ·
Re: Шаблонный код в Java/Kotlin - возможно ли?
Здравствуйте, rus blood, Вы писали:
RB>Почему нельзя вынести одинаковые поля в общий класс?
Это называется duck typing. И во многих ЯП нет такого принципиально. Т.к. это создаёт неявную связь между типами.
Можно размотать через лямбды:
По классике ООП можно делать адаптеры (удобно в случае если методов больше одного):
Можно через рефлексию. Но лучше не нужно.
RB>Почему нельзя вынести одинаковые поля в общий класс?
Это называется duck typing. И во многих ЯП нет такого принципиально. Т.к. это создаёт неявную связь между типами.
Можно размотать через лямбды:
<T> void printValue(Supplier<String> value) {
System.out.println(value.get());
}
...
var a = new A();
printValue(a::value);
var b = new B();
printValue(b::value);
По классике ООП можно делать адаптеры (удобно в случае если методов больше одного):
interface ValueAdapter
{
String value();
ValueAdapter wrap(A a) {return () -> a.value};
ValueAdapter wrap(B b) {return () -> b.value};
}
void printValue(ValueAdapter adapter) {
System.out.println(adapter.value());
}
var a = ValueAdapter.wrap(new A());
printValue(a);
var b = ValueAdapter.wrap(new B());
printValue(b);
Можно через рефлексию. Но лучше не нужно.
Re: Шаблонный код в Java/Kotlin - возможно ли?
Здравствуйте, rus blood, Вы писали:
RB>Почему нельзя вынести одинаковые поля в общий класс?
Это называется duck typing. И во многих ЯП нет такого принципиально. Т.к. это создаёт неявную связь между типами.
Можно размотать через лямбды:
По классике ООП можно делать адаптеры (удобно в случае если методов больше одного):
Можно через рефлексию. Но лучше не нужно.
RB>Почему нельзя вынести одинаковые поля в общий класс?
Это называется duck typing. И во многих ЯП нет такого принципиально. Т.к. это создаёт неявную связь между типами.
Можно размотать через лямбды:
<T> void printValue(Supplier<String> value) {
System.out.println(value.get());
}
...
var a = new A();
printValue(a::value);
var b = new B();
printValue(b::value);
По классике ООП можно делать адаптеры (удобно в случае если методов больше одного):
interface ValueAdapter
{
String value();
static ValueAdapter wrap(A a) {return () -> a.value;}
static ValueAdapter wrap(B b) {return () -> b.value;}
}
void printValue(ValueAdapter adapter) {
System.out.println(adapter.value());
}
var a = ValueAdapter.wrap(new A());
printValue(a);
var b = ValueAdapter.wrap(new B());
printValue(b);
Можно через рефлексию. Но лучше не нужно.