#java #interface
#java #интерфейс
Вопрос:
Существует ли существующий интерфейс (или абстрактный класс), который позволяет вам определять преобразования между двумя разными типами? Вы бы реализовали (или расширили) его, и, например, вы можете конвертировать между a Foo
и a Bar
.
Пример интерфейса:
public interface ConvertibleInterface<T, U> {
public U to(T item);
public T from(U item);
}
Мне просто было интересно, существует ли что-то подобное в системных библиотеках Java.
Комментарии:
1. Нет. В Java generics это может также не иметь такого смысла, поскольку допускает только одно сопряжение T / U. (В .NET есть довольно сложная система преобразования, но я не знаю ничего подобного в core Java.)
2. В стандартной библиотеке ничего нет, но система преобразования типов Spring имеет интерфейсы для этих операций и классы поддержки для обработки преобразований.
Ответ №1:
Вы могли бы использовать новый Function<T, U>
тип, чтобы определить что-то, что будет преобразовываться в данный тип и из него:
Function<String, Integer> toInt = (String in) -> Integer.parseInt(in);
Function<Integer, String> toString = (Integer in) -> in.toString();
Integer converted = toInt.apply("101");
Смотрите Документы API здесь. Это было добавлено в Java 8, поэтому убедитесь, что вы в курсе последних событий.
Комментарии:
1. Для Java 7 и ниже Guava имеет a
Function
с тем же именем, но, конечно, это также был бы довольно простой интерфейс для самостоятельной реализации.2. Преимущество интерфейса Guava в том, что он также работает с рядом других утилит Guava.