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

如何在Java构造方法中将类存入变量并指定ArrayList类型

修正后的实现方案

你的代码存在几个关键问题,下面是修正后的实现和问题说明:

核心问题分析

  1. 泛型声明错误:MyArray类未声明泛型参数,导致T无法被识别;同时class<T>是语法错误,Java中表示类对象的类型是Class<T>(注意大写C,小写class是关键字)。
  2. 变量作用域问题:Arr是构造方法的局部变量,ArrSize()方法无法访问它,需要将其提升为类的成员变量。
  3. 实例化错误:main方法中不能直接传入class作为参数,需要传入具体的Class对象(如String.class),同时要指定MyArray的泛型类型。
  4. 命名规范问题:Java中变量名和方法名应遵循小驼峰命名法(如arr、arrSize)。

修正后的代码

MyArray类

import java.util.ArrayList;

public class MyArray<T> {
    // 成员变量:让arrSize()方法可以访问
    private ArrayList<T> arr;

    // 构造方法:接收Class对象(若后续有反射需求可保留,否则可简化)
    public MyArray(Class<T> type) {
        arr = new ArrayList<>();
        // 可在此处利用type进行反射操作,比如创建实例
    }

    // 简化版构造方法(无需Class参数时使用)
    public MyArray() {
        arr = new ArrayList<>();
    }

    // 获取集合大小的方法
    public void arrSize() {
        System.out.println(arr.size());
    }

    // 新增添加元素的方法,方便测试
    public void addElement(T element) {
        arr.add(element);
    }
}

Main类

public class Main {
    public static void main(String[] args) {
        // 实例化泛型类,指定类型为String,并传入对应的Class对象
        MyArray<String> array = new MyArray<>(String.class);
        
        // 添加测试元素
        array.addElement("Java");
        array.addElement("泛型");
        
        // 输出集合大小
        array.arrSize();
    }
}

补充说明

  • 如果不需要利用Class对象做反射操作,完全可以不用在构造方法中接收Class<T>参数,直接通过MyArray<String> array = new MyArray<>();实例化即可,泛型类型String已经足够指定ArrayList的元素类型。
  • 泛型的作用是在编译时检查类型安全,避免运行时类型转换异常,所以声明泛型类是指定ArrayList类型的标准方式。

内容的提问来源于stack exchange,提问作者NTZ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:52:25