在java泛型上下文中,原始类型是泛型类型的非参数化调用.他们还说任何非泛型类型都不是原始类型.
我的困惑是,为什么他们说非泛型类型不是原始类型?它与泛型类型的非参数化调用有何不同?考虑以下2个案例.
情况1:
class A<T>{
}
A a = new A(); //Raw type
Run Code Online (Sandbox Code Playgroud)
案例2:
class A{
}
A a = new A();//Non-generic type
Run Code Online (Sandbox Code Playgroud)
如果变量"a"在两种情况下表现相同,为什么他们说case [1]是原始类型而case [2]不是?
原始类型的概念仅与泛型类型相关,因为原始类型被认为与泛型类型赋值兼容,但进行此类赋值会在类型安全性上造成漏洞,否则可以为泛型类型提供保证。例如,考虑一个方法void workWith(A<Integer> a)
。您将被允许传递a
变量,从而导致类型安全事件。
由于非泛型类型不会遇到此类问题,因此它们不被称为“原始类型”。