Узнал что у интерфейса можно определить дженерики, попробовал сделать это в коде, но так и не понял где это используется(и как), т.к. это ни на что не повлияло. P.S. Еще вчера узнал что у методов в интерфейсе может быть тело, если метод статический. Это практически убирает различие между абстрактными классами и интерфейсами(кроме наследования и final переменных).
Дженерики нужны для обобщения. Это относится и к классам, и к интерфейсам.
Пример интерфейса с дженериком:
interface MyExecute<T> {
void execute(T obj) throws Exception;
}
class ThreadExecute<T> implements MyExecute<T> {
@Override
public void execute(T obj) throws Exception {
System.out.println("obj: " + obj);
// Тут мы индивидуально, в зависимости от типа объекта делаем обработку
if (obj instanceof String) {
// ...
} else if (obj instanceof List) {
// ...
} else {
// ..
}
}
}
class ProcessExecute<T> implements MyExecute<T> {
@Override
public void execute(T obj) throws Exception {
// ...
}
}
// Можно имплементироваться от интерфейса с указанием конкретного типа:
class ProcessExecuteStr implements MyExecute<String> {
@Override
public void execute(String obj) throws Exception {
// ...
}
}
public class Main {
public static void main(String[] args) throws Exception {
ThreadExecute<String> thread = new ThreadExecute<>();
thread.execute("abc");
ThreadExecute<List<String>> thread2 = new ThreadExecute<>();
thread2.execute(Arrays.asList("1", "a", "@"));
MyExecute<Integer> process = new ProcessExecute<>();
process.execute(+100500);
}
}
Согласен с написанным выше. Можно было бы везде пользоваться Object
типом, а после его приводить к нужному типу(если бы не было джинериков), но тогда появится потенциальная ошибка во время выполнения(ClassCastException
), а когда есть джинерки, ошибка будет на этапе компиляции.
Пример: у вас есть List<String>
, а вы при вызове метода add()
вставляете Integer
, то когда есть джинерки, эта ошибка проявится на этапе компиляции, а если нет, то на этапе выполнения.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В Kotlin это будет выглядеть следующим образом:
Мне нужен способ чтение и записи в файл с использованием указателяТо есть что бы я мог поставить указатель на нужную мне позицию в файле и считать...