Мне любопытно, какие конкретные правила стирания типа Java вызывают следующее:
import java.util.function.Supplier;
public class TypeCheckerWeirdness {
public static class Meow<S extends Meow> {
public Supplier<Boolean> hungry;
}
public static void main(String[] args) {
Meow<?> instanceA = new Meow<>();
Meow instanceB = new Meow<>();
// fine
boolean x1 = instanceA.hungry.get();
// incompatible types. Found: 'java.lang.Object', required: 'boolean'
boolean x2 = instanceB.hungry.get();
}
}
Это из-за того, что если вы используете необработанный тип, вся информация о дженериках для членов типа будет стерта даже во время компиляции?