You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:51:45