Java泛型疑问:能否将对象用作形式参数?
问题分析与解决方案
嘿,我来帮你拆解一下代码里的问题,其实都是泛型使用的基础细节没注意到:
核心错误点
- 泛型参数必须是类型,不能是变量:你写的
Pair<book1,int>里,book1是你声明的Book类型变量,不是类型本身,这里必须换成Book这个类的类型。 - 泛型不支持基本类型:
int是Java的基本数据类型,泛型的类型参数只能是引用类型(类、接口等),所以要换成对应的包装类Integer。 - 构造函数参数类型不匹配:你创建
Pair时传了字符串"somebook",但泛型指定的第一个类型是Book,这里得传一个Book对象,而不是字符串。
修正后的完整代码
Book类
public class Book { String title; public Book(String s) { title = s; } public String getTitle() { return title; } public static void main(String[] args) { // 先创建一个Book对象 Book book1 = new Book("somebook"); // 修正泛型参数,传入匹配的类型对象 Pair<Book, Integer> pair1 = new Pair<>(book1, 22); // 可以加个测试输出验证 System.out.println("Book title: " + pair1.getFirst().getTitle()); System.out.println("Number: " + pair1.getSecond()); } }
Pair泛型类
public class Pair<A,B> { A first; B second; public Pair(A a, B b) { first = a; second = b; } public A getFirst() { return first; } public B getSecond() { return second; } }
补充说明
Java泛型的设计是为了处理引用类型,所以基本类型都得用对应的包装类(比如int→Integer,double→Double等)。另外,泛型尖括号里的内容必须是合法的类型名称,不能用变量名或者未定义的类型,这点一定要注意哦~
内容的提问来源于stack exchange,提问作者shinryu333
相关产品推荐
相关产品推荐

