你可以在类或方法中使用原始类型作为泛型参数吗?

时间:2014-02-21 02:54:03

标签: java

我正在写一篇关于泛型的简短论文,我在Java中并没有真正使用它们。我想知道原始类型是否可以用作通用变量中的参数类型。我无法使用泛型类型的泛型参数进行编译。

问题:我不确定泛型如何处理原始数据类型。有人可以举例说明如何将方法声明为不同,不必使用Integer向int类型添加强制转换,以及是否可以在类声明中使用原始Java数据类型

   DDHGeneric<int,int,int,int> t = new DDHGeneric<int,int,int,int>();

有办法做到这一点吗?

以下声明也不编译。我知道根据我对泛型的了解,使用原始数据类型和用户定义的类之间存在差异。

   DDHGeneric<int, int, int, int> temp2 = new  DDHGeneric<int, int, int, int>();

类别:

public class DDHGeneric<T,K,Bigfoot,Pizza> {
    T a;
    K n;
    Bigfoot u;

    public DDHGeneric() {
    }

    private <rapper> void myMethod(rapper y) {
    int temp = y; <--Errors out on this line as will.
}

    public <Pizza> void myAddition(Pizza a, Pizza b) {
    }

    private <K> void me(K a, K b, K c) {
    }

    public static void main(String[] args) {
         DDHGeneric<int, Integer, Integer, Integer> temp = new  DDHGeneric<int, Integer, Integer, Integer>();
         temp.myAddition(5, 4);
         temp.a = "Test this string!" ;
    }
}

3 个答案:

答案 0 :(得分:4)

你不能。

Oracle提供an article on this topic

引用:

  

创建Pair对象时,不能用基本类型替换类型参数K或V:

     

Pair<int, char> p = new Pair<>(8, 'a'); // compile-time error

     

您只能将非基本类型替换为类型参数K和V:

     

Pair<Integer, Character> p = new Pair<>(8, 'a');

答案 1 :(得分:4)

没有

泛型并不代表原语。它们旨在表示对象(作为泛型类型all extend Object implicitly)。

您可以使用所需基元类的包装变体来实现相同的效果。

 DDHGeneric<Integer, Integer, Integer, Integer> t = new DDHGeneric<>();

以下是Java Trails中的Why Use Generics?摘录:

  

简而言之,泛型使类型(类和接口)在定义类,接口和方法时成为参数。

答案 2 :(得分:1)

泛型只采用原始类而不是原始数据类型。

对于每种数据类型,使用其相应的类

DDHGeneric<int,int,int,int> t = new DDHGeneric<int,int,int,int>();

可以用作

DDHGeneric<Integer, Integer, Integer, Integer> t = new DDHGeneric<Integer, Integer, Integer, Integer>();