У меня есть следующий код:
import java.util.*;
public class Exmp {
public static void main(String[] args) {
List
static class Gen
void m(List
Никак не могу понять почему вызывается метод со списком строк. Может кто ткнет носом?
Ответ
Это поведение действительно является наследием до-дженериковой эры и относится к т.н. raw type:
To facilitate interfacing with non-generic legacy code, it is possible
to use as a type the erasure (§4.6) of a parameterized type (§4.5) or
the erasure of an array type (§10.1) whose element type is a
parameterized type. Such a type is called a raw type.
More precisely, a raw type is defined to be one of:
The reference type that is formed by taking the name of a generic type
declaration without an accompanying type argument list.
An array type whose element type is a raw type.
A non-static member type of a raw type R that is not inherited from a
superclass or superinterface of R.
JLS 4.8
Raw type - это дженерик, использованный без указания типов; в данном случае raw type - это Gen
The type of a constructor (§8.8), instance method (§8.4, §9.4), or non-static field (§8.3) M of a raw type C that is not inherited from its superclasses or superinterfaces is the raw type that corresponds to the erasure of its type in the generic declaration corresponding to C.
JLS 4.8
В том числе сбрасывается информация о List
Комментариев нет:
Отправить комментарий