Я создаю API, который использует абстрактные классы для вызова статических методов.Некоторый псевдокод Java:
public abstract class APIBaseClass {
public static List<?> myMethod(Class<?> clazz, MyConverter converter, List<Object> objects) {
return objects.stream()
.map(object -> converter.convertObjectToType(object, clazz))
.collect(Collectors.toList());
}
}
И, где вызывается myMethod
:
public abstract class MyAPIClass extends APIBaseClass {
public static List<MyClassType> invokingMethod(MyConverter converter, List<Object> objects) {
List<MyClassType> list = myMethod(MyClassType.class, converter, objects);
...
return list;
}
}
myMethod
компилируется, как и ожидалось.И invokingMethod
не компилируется, как и ожидалось, из-за несовместимых типов:
Required: List<blah.blah.blah.MyClassType>
Found: List<capture<?>>
Компилируется без ошибок или предупреждений, если I: (1) @SuppressWarnings ("unchecked") на invokingMethod
и (2) приведите результат myMethod
к списку MyClassType
, когда вызывается, то есть List<MyClassType> list = (List<MyClassType>) myMethod(MyClassType.class, converter, objects);
.Тем не менее, нет никакой прозрачности, что это было бы необходимо для любого, кто использует API, который кажется менее чем идеальным.
Каковы мои варианты для myMethod
, возвращая список типа, с которым он вызывается, на invokingMethod
, поддерживая мои абстрактные классы и статические методы, в то же время идеально улучшая удобство использования в invokingMethod
?
Любые предложения или альтернативные идеи приветствуются.
Заранее спасибо.