面试题:List<Integer> list = new ArrayList<>() 里面可以放String类型的数据吗?

本文探讨了Java反射机制,它允许在运行时获取类的信息并操作对象。示例展示了如何使用反射将不同类型的对象(如Integer和String)添加到List中。通过调用list的add方法并传递适当参数,即使原始List被声明为特定类型,也能实现类型转换和添加。
摘要由CSDN通过智能技术生成

可以通过反射将String放入List中。

那什么是反射呢?
在运行过过程中

  • 获取类的名称,方法,属性,注解,类型等。
  • 获取任意对象的方法,属性等。并且可以改变对象属性
  • 判断一个对象所属的类
  • 实例化任意一个类的对象

其实就是java提供的reflect包

回到一开始的那个问题,List list = new ArrayList<>()里面可以放String类型的数据吗?

很显然是可以的,因为list是一个对象,而反射可以获取对象的属性方法,并且改变对象属性。那我们就可以通过list.getMethod()方法获取list的add方法,然后将其参数改为String就可以保存String类型的数据。

@Test
    public void test01() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        List<Integer> list = new ArrayList<>();
        list.add(3);

        Class<? extends List> aClass = list.getClass();
        Method add = aClass.getMethod("add", Object.class);
        add.invoke(list,new String("老王"));
        System.out.println(list);
    }
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
 
public class Demo {
 
	public static void main(String[] args) throws NoSuchMethodException,
			SecurityException, IllegalAccessException,
			IllegalArgumentException, InvocationTargetException {
 
		List<String> list = new ArrayList<String>();
		Class<?> cls = list.getClass();
		Method method = cls.getMethod("add", Object.class);
		method.invoke(list, 1);
		method.invoke(list, "s");
		method.invoke(list, 2);
		method.invoke(list, 4);
 
		System.out.println(list);
		
		ArrayList<Object> obj = new ArrayList<Object>();
		obj.addAll(list);
		for (int i = 0; i < obj.size(); i++) {
			System.out.println(obj.get(i));
		}
 
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值