java - 使用泛型类型参数作为方法参数而不是使用对象类型有什么用?

标签 java generics

我是java新手,对泛型有一点困惑。一篇文章使用了一种打印数组所有元素的方法,并且该方法采用泛型类型参数。不同类型的原始数组已传递给此方法,例如,它运行良好。

private <E> void printData(E[] arr) {
    for (E e : arr) {
        System.out.println(e);
    }
}`

Integer[] intArray = {1, 3, 4, 5, 5, 23};
Double[] doubleArray = {12.4, 34.5, 3.5, 45.67};
Character[] charArray = {'a', 'b', 'c', 'd'};

printData(intArray);
printData(doubleArray);
printData(charArray);

我的问题是我们可以在 printData() 方法中使用 Object[] 类型参数而不是 E[] 类型。因为所有类型(包括原始包装类)都是从 Object 继承的。在方法中使用泛型类型参数作为参数的实际用法是什么?在方法中使用泛型类型参数有什么有用的用法吗?

对象类型和泛型类型之间有什么区别,您能举例说明吗?

有人可以帮我吗?

非常感谢

最佳答案

您使用泛型来类型安全避免强制转换。您的示例并不完整,让我们看一下:

public class Printer<E> {

   public void printData(E[] arr) {
        for (E e : arr)
           System.out.println(e);
    }
}

Printer<Integer> intPrinter = new Printer<Integer>();

如果实例化一个新的 Printer 对象,则将泛型类型传递给该类。这意味着该打印机对象仅适用于该特定类型。因此,您有一个泛型类(您可以实例化多种类型),但您将在编译时获得类型安全。如果您尝试将String传递给您的intPrinter,它将不起作用。

关于java - 使用泛型类型参数作为方法参数而不是使用对象类型有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24179440/

相关文章:

java - 数组和具体化类型

java - 创建可变参数的 List<?>

C# 泛型 : how to use x. 泛型类中的 MaxValue/x.MinValue (int, float, double)

c# - Action 字典期望其键的类型

java - Spring 测试 - WebTestClient 无法 Autowiring 。未找到 'WebTestClient' 类型的 beans

java - 使用JAVA迭代器

java - 我有保留窗口,但数据未保存。如何将 boolean 值存储到数据库中?

java - 如何不对循环内的无效输入增加循环计数器

java - JTable.editCellAt(row,column) 的反义词是什么?

java - 泛型类型和通配符类型的区别