Я бы хотел, чтобы животные не знали авторов.в конце концов, это животные.
Вы можете иметь Map<Class,Writer>
, и для каждой записи в нем вы утверждаете, что ключ Class<X>
и значение Writer<X>
относятся к одному и тому же типу X
.Мы не можем выразить это отношение в типах, поэтому приведение должно выполняться в некоторых местах.Если поиск типа не удастся (скажем, Cat), попробуйте поискать снова с его супертипами (Animal)
Безопасный публичный API типа может быть разработан как
static public <T> void registerWriter(Class<T> type, Writer<T> writer)
static public <T> Writer<? super T> getWriter(Class<T> type)
Предположим, мы неу нас нет Writer, напрямую сопоставленного с Cat, но у нас есть Writer<Animal>
для Animal, тогда этот писатель будет возвращен для Cat.class.Это нормально, потому что этот писатель принимает всех животных.
Этот удобный метод может быть предоставлен:
static public static void write(Object obj)
от типа объекта, можно найти подходящего писателя иписатель примет объект.