Java泛型中的原始类型是什么?

泛型是Java中的一个概念,您可以在其中启用类,接口和方法,以接受所有(引用)类型作为参数。换句话说,该概念使用户能够动态选择方法(类的构造函数)接受的引用类型。通过将类定义为泛型,可以使其成为类型安全的,即它可以作用于任何数据类型。

要定义泛型类,您需要在类名称后的尖括号“ <>”中指定要使用的类型参数,并将其视为实例变量的数据类型,然后继续执行代码。

示例-泛型类

class Person<T>{
   T age;
   Person(T age){
      this.age = age;
   }
   public void display() {
      System.out.println("Value of age: "+this.age);
   }
}

用法 -在实例化泛型类时,您需要在尖括号内的类之后指定对象名称。因此,可以动态选择type参数的类型,并将所需的对象作为参数传递。

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类时观察上述示例,则需要在尖括号中为type参数(类型的类型)指定type。

如果您避免在尖括号中指定任何类型参数,并创建一个泛型类的对象,或者将它们简称为原始类型。

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.