Как видите, IntelliJ IDEA ведет себя точно так же, как и командная строка

у код ниже не сообщает о непроверенных предупреждениях Intellij IDEA сjdk 1.8.0_121 посколькуSupplier<R> & Serializable это супертипT?

<T extends Supplier<Integer> & Serializable> T createdBy(AtomicInteger counter) {
    //      v--- if I removed the first cast expression, I can't compile it
    return (T) (Supplier<Integer> & Serializable) counter::incrementAndGet;
    //           ^--- it should be reports unchecked warnings, but it doesn't

}

И следующий код сообщает о непроверенных предупреждениях о приведении:

<T, R extends T> R apply(T value) {
    return (R) value;
    //      ^--- unchecked cast 
}

Почему возникает этот вопрос, интересная вещь возникает во время написания кода ниже для объединения типов с несколькими супертипами:

AtomicInteger counter  = new AtomicInteger(0);
Supplier<Integer>  serialized = serialized(createdBy(counter));

assert serialized.get() == 1; // ok
assert counter.get() == 0 ; // ok

<T extends Serializable> T serialized(T value) {
    return deserialize(serialize(value));
}

Я искал через JLS, но я не могу найти точно благоприятные доказательства. Может кто-нибудь сказать мне, почему?

Ответы на вопрос(0)

Ваш ответ на вопрос