Информация об изменениях

Сообщение Re: Шаблонный код в Java/Kotlin - возможно ли? от 05.12.2023 6:13

Изменено 05.12.2023 6:19 Worminator X

Re: Шаблонный код в Java/Kotlin - возможно ли?
Здравствуйте, rus blood, Вы писали:

RB>Коллеги, всем привет!


RB>Пишу на котлин, и возникла такая ситуация.

RB>Есть набор разных классов (можно считать, data-классов), одинаковых по структуре, т.е. у них часть полей одинаковы по названиям и типам.
RB>Нужно с объектами этих классов делать однотипные действия с "общими" полями.
RB>На плюсах я бы сделал это шаблонными функциями.
RB>Есть ли аналог шаблонных функций в котлине?

В базовой Java есть шаблонные функции:
import java.lang.reflect.Field;

public class Program {
    static <T> void printValue(T t) throws Exception {
        final Field field = t.getClass().getDeclaredField("value");
        final String value = (String)field.get(t);
        System.out.println(value);
    }
    static class A {
        public String value;
    }
    static class B {
        public String value;
    }
    public static void main() {
        final A a = new A();
        a.value = "A";
        final B b = new B();
        b.value = "B";
        try {
            printValue(a);
            printValue(b);
        } catch (Exception ex) {
            System.err.println(ex.getMessage());
        }
    }
}


Но архитектурно правильно, как уже сказали, создавать специальный класс-адаптер.
В Scala для шаблонных функций есть trait'ы, имеются ли они в Kotlin, не знаю.
Re: Шаблонный код в Java/Kotlin - возможно ли?
Здравствуйте, rus blood, Вы писали:

RB>Коллеги, всем привет!


RB>Пишу на котлин, и возникла такая ситуация.

RB>Есть набор разных классов (можно считать, data-классов), одинаковых по структуре, т.е. у них часть полей одинаковы по названиям и типам.
RB>Нужно с объектами этих классов делать однотипные действия с "общими" полями.
RB>На плюсах я бы сделал это шаблонными функциями.
RB>Есть ли аналог шаблонных функций в котлине?

В базовой Java есть шаблонные функции:
import java.lang.reflect.Field;

public class Program {
    static <T> void printValue(T t) throws Exception {
        final Field field = t.getClass().getDeclaredField("value");
        final String value = (String)field.get(t);
        System.out.println(value);
    }
    static class A {
        public String value;
    }
    static class B {
        public String value;
    }
    public static void main(String[] args) {
        final A a = new A();
        a.value = "A";
        final B b = new B();
        b.value = "B";
        try {
            printValue(a);
            printValue(b);
        } catch (Exception ex) {
            System.err.println(ex.getMessage());
        }
    }
}


Но архитектурно правильно, как уже сказали, создавать специальный класс-адаптер.
В Scala для шаблонных функций есть trait'ы, имеются ли они в Kotlin, не знаю.