Я думаю, что выбор между Java и C # - это не вопрос языковых возможностей, а вопрос выбора платформы и экосистемы.
Итак, я сомневаюсь, что любой новый синтаксический сахар в Java или C # может привести к значительному количеству переключателей между платформами.
В конце концов, в мире JVM есть Scala, и многие разработчики, чувствительные к языку, используют его каким-то образом.
Возможно, базовый тип является универсальным параметром, поэтому фактический тип может быть интерфейсом класса. Учтите:
class MyGen<T, U extends T> {
Также с точки зрения клиентского кода интерфейсы почти неотличимы от классов, тогда как для подтипа это важно.
В языке общих ограничений нет семантической разницы между тем, «реализует» класс или «расширяет». Возможными ограничениями являются «extends» и «super» - то есть, может ли этот класс работать с этим другим классом (extends), или этот класс назначается из этого (super).
Вероятно, потому что для обеих сторон (B и C) важен только тип, а не реализация. В вашем примере
public class A<B extends C>{}
B также может быть интерфейсом. «extends» используется для определения суб-интерфейсов, а также подклассов.
interface IntfSub extends IntfSuper {}
class ClzSub extends ClzSuper {}
Я обычно думаю о «Sub extends Super» как о » Sub похоже на Super , но с дополнительные возможности »и« Clz реализует Intf », поскольку« Clz является реализацией Intf ». В вашем примере это будет соответствовать: B похоже на C , но с дополнительными возможностями. Здесь важны возможности, а не реализация.