如何在Java构造方法中将类存入变量并指定ArrayList类型
修正后的实现方案
你的代码存在几个关键问题,下面是修正后的实现和问题说明:
核心问题分析
- 泛型声明错误:
MyArray类未声明泛型参数,导致T无法被识别;同时class<T>是语法错误,Java中表示类对象的类型是Class<T>(注意大写C,小写class是关键字)。 - 变量作用域问题:
Arr是构造方法的局部变量,ArrSize()方法无法访问它,需要将其提升为类的成员变量。 - 实例化错误:main方法中不能直接传入
class作为参数,需要传入具体的Class对象(如String.class),同时要指定MyArray的泛型类型。 - 命名规范问题: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
相关产品推荐
相关产品推荐

