Java — существует ли «конвертируемый» интерфейс?

#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.