Если у меня есть интерфейс с универсальным методом, как следующее:Java Generics: переопределение общих методов, подстановочные знаки?
public interface Thing {
void <T extends Comparable<? super T>> doSomething(List<T> objects);
}
мне нужно что некрасиво общий typespec в некоторых местах, но большинство реализаций фактически не нужно:
public class ICareAboutSortingThing implements Thing {
@Override
public void <T extends Comparable<? super T>> doSomething(List<T> objects) { ... }
}
public class IDontCareAboutSortingThingx100 implements Thing {
@Override
public void <T extends Comparable<? super T>> doSomething(List<T> objects) { ... }
}
Что Я хотел бы написать что-то вроде:
public class IDontCareAboutSortingThingx100 implements Thing {
@Override
public void <?> doSomething(List<?> objects) { ... }
}
Это должно быть полностью типизированной, насколько я понимаю, но есть какие-либо изменения этого что бы сработало? Я понимаю, что компилятор не позволяет переопределять не-общие методы, но это случай замены аргументов типа на подстановочные знаки. Я думаю, что это на самом деле не поддерживается, так как компилятор может так же легко поддерживать
public class IDontCareAboutSortingThingx100 implements Thing {
@Override
public void <T> doSomething(List<T> objects) { ... }
}
т.е. преимущественную с более слабыми границами, но это, кажется, не допускается. Во всяком случае, просто любопытно, есть ли у кого-то волшебное заклинание для подобных случаев.
Спасибо, похоже на заключение и решение, к которому я пришел. К сожалению, я привязан к Java 7, но в итоге я заменил интерфейс для класса, который показал обе точки переопределения, причем один делегировал другому по умолчанию. Я мог бы поклясться, что Java поддерживает расширяющиеся типы аргументов при переопределении, но я предполагаю, что я фактически не пробовал в последнее время: стр. Немного постыдно; для неосновного случая я могу понять это как оптимизацию для поиска/привязки подписи метода, но тип erasure (kind) делает это несущественным. Полагаю, что это непротиворечиво: /. – user508633
+1 на каких-либо сырых типах; Я могу понять, что использование кода private-scope в очень контролируемых обстоятельствах, если использование, как известно, безопасно, но иногда они появляются и в публичных интерфейсах, и это заставляет меня (и мою IDE) кричать. Еще хуже, но это 'public ThingProducingTs getThing (String)', что заставляет мои глаза ослеплять. –
user508633
Ну, общие типы должны быть объявлены каким-то образом. Java более точная, чем некоторые другие языки (* cough * C++). – Radiodef