我正在写一篇关于泛型的简短论文,我在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!" ;
}
}
答案 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>();