Стирание типа Java для членов необработанных типов

Мне любопытно, какие конкретные правила стирания типа 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();
    }

}

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


person Haochen Xie    schedule 12.03.2016    source источник
comment
Да, ваша интуиция верна, хотя я не знаю, является ли стирание правильным термином для того, что здесь происходит. Взгляните на этот вопрос: stackoverflow.com/q/11007723/228171   -  person Mark Peters    schedule 12.03.2016