Скажем, у меня есть общий интерфейс:смягчение Bound несовпадение
interface SomeInterface<T> {
...
}
и две реализации:
конкретный один (возможно, оптимизированный для SpecificClass
и его потомков):
class SpecificImplementation<T extends SpecificClass> implements SomeInterface<T> {
...
}
и другое уловить все (возможно, которые могут обрабатывать все типы, но очень неэффективны):
class CatchAllImplementation<T> implements SomeInterface<T> {
....
}
И я хочу иметь общий метод, аналогичный следующий:
public <T> SomeInterface<T> getImplementation(Class<T> clazz) {
if(SpecificClass.class.isAssignableFrom(clazz))
{
// do some specific stuff
...
// get specific optimised implementation for SpecificClass and descendents
return new SpecificImplementation<T>(); // bound mismatch error here
}
else
{
// do other stuff
...
// get inefficient catch all implementation in other cases
return new CatchAllImplementation<T>();
}
}
Есть ли способ смягчения против связанной ошибки рассогласования? Какой-то трюк, чтобы заставить компилятор игнорировать его или подобное?
Мне не нужно привязывать параметр типа к конкретной реализации, но я бы предпочел сделать это.
Разве вы не можете использовать что-то вроде 'класса SpecificImplementation реализует SomeInterface или' класс SpecificImplementation реализует SomeInterface '? –
JimmyB