Java泛型中的原始类型是什么?
泛型是Java中一个概念,您可以使用它使类、接口和方法接受所有(引用)类型作为参数。换句话说,它是一个允许用户动态选择方法、类构造函数接受的引用类型的概念。通过将类定义为泛型,您使其类型安全,即它可以作用于任何数据类型。
要定义一个泛型类,您需要在类名后的尖括号“<>”中指定您正在使用的类型参数,您可以将其视为实例变量的数据类型并继续编写代码。
示例 - 泛型类
class Person<T>{ T age; Person(T age){ this.age = age; } public void display() { System.out.println("Value of age: "+this.age); } }
用法 - 在实例化泛型类时,您需要在类后的尖括号内指定对象名称。因此,动态选择类型参数的类型并传递所需的物体作为参数。
public class GenericClassExample { public static void main(String args[]) { Person<Float> std1 = new Person<Float>(25.5f); std1.display(); Person<String> std2 = new Person<String>("25"); std2.display(); Person<Integer> std3 = new Person<Integer>(25); std3.display(); } }
原始类型
在创建泛型类或接口的对象时,如果您没有提及类型参数,则它们被称为原始类型。
例如,如果您观察上面的示例,在实例化Person类时,您需要在尖括号中为类型参数(类的类型)指定类型。
如果您避免在尖括号内指定任何类型参数并创建泛型类或接口的对象,则它们被称为原始类型。
public class GenericClassExample { public static void main(String args[]) { Person per = new Person("1254"); std1.display(); } }
警告
这些将在没有错误的情况下编译,但会生成如下所示的警告。
Note: GenericClassExample.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details
以下是关于原始类型的一些值得注意的要点:
- 您可以将参数化(泛型)类型分配给其原始类型。
public class GenericClassExample { public static void main(String args[]) { Person per = new Person(new Object()); per = new Person<String>("25"); per.display(); } }
输出
Value of age: 25
- 如果您将原始类型分配给参数化类型,则会生成警告。
public class GenericClassExample { public static void main(String args[]) { Person<String> obj = new Person<String>(""); obj = new Person(new Object()); obj.display(); } }
警告
Note: GenericClassExample.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details.
如果您的泛型类包含一个泛型方法,并且您尝试使用原始类型调用它,则会在编译时生成警告。
public class GenericClassExample { public static void main(String args[]) { Student std = new Student("Raju"); System.out.println(std.getValue()); } }
警告
Note: GenericClassExample.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details.
广告