Я создаю 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<?>>
Он компилируется без ошибок или предупреждений, если я: (1) @SuppressWarnings("unchecked") для invokingMethod
и (2) приведу результат myMethod
к списку MyClassType
при вызове, то есть List<MyClassType> list = (List<MyClassType>) myMethod(MyClassType.class, converter, objects);
. Тем не менее, нет никакой ясности в том, что это будет необходимо любому, кто использует API, что кажется далеким от идеала.
Каковы мои варианты для myMethod
, возвращающего список типа, с которым он вызывается, в invokingMethod
, сохраняя при этом мои абстрактные классы и статические методы, а в идеале улучшая удобство использования в invokingMethod
?
Любые предложения или альтернативные идеи приветствуются.
Заранее спасибо.
myMethod(MyClassType.class, objectsList)
не то же самое, чтоmyMethod(Class<?> clazz, MyConverter converter, List<Object> objects)
? - person tsolakp   schedule 25.10.2018objects
вместоobjectsList
? - person tsolakp   schedule 25.10.2018