Groovy generi c тип, который расширяет несоответствие признаков - не является допустимой заменой ограниченного параметра - PullRequest
3 голосов
/ 28 мая 2020

Код ниже не компилируется в Groovy 3.0.4 (хотя его прекрасно с Groovy 2.5.0 и ниже)

Factory<SomeImpl> f = new Factory<>();

trait Base {}
class SomeImpl implements Base {}
class Factory<T extends Base> {}

Точная ошибка, которую я получаю:

The type SomeImpl is not a valid substitute for the bounded parameter <T extends Base> @ line 1, column 9.
Factory<SomeImpl> f = new Factory<>();

Изменение Base с trait на interface позволяет компилировать код должным образом, и он работает (как в Java).

Является ли трейт чем-то отличным от интерфейса, который не позволяет нам создавать такие конструкции? или это ошибка в последних groovy версиях?

...