使用反射在 ArrayList<Integer> 集合中添加一个字符串数据;

本文介绍了一种利用Java反射机制向限定类型的ArrayList&lt;Integer&gt;集合中添加字符串的方法。通过获取ArrayList类的Class对象及其add方法,实现了对集合元素的动态添加,并展示了具体的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

整体思路就是:

1:新建一个ArrayList<integer>集合

2:然后使用反射,返回ArrayList的class对象

3:使用class中的getmethod方法,找到ArrayList中的   add方法(此方法是添加元素的时候用的)

3:使用method类中的invoke方法,将字符串添加到集合中

4:遍历集合 输出字符串。


//导包
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;

/**
 * 使用反射在 ArrayList<Integer> 这个集合中添加一个字符串数据;
 * 
 * @author Starry
 */
public class ArrayListStringDemo {
	// 主程序入口
	public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException,
			IllegalArgumentException, InvocationTargetException {

		// 定义一个ArrayList集合 泛型类型为Integer
		ArrayList<Integer> arl = new ArrayList<Integer>();
		arl.add(3);
		// 将上面定义的Arraylist 返回Arraylist的class对象
		Class<? extends ArrayList> clazz = arl.getClass();
		// 获取Arraylist 类里面的add方法
		Method method = clazz.getMethod("add", Object.class);
		// 对arl对象调用由 Method 对象表示的底层方法 ,向集合中添加字符串
		method.invoke(arl, "这是一个字符串");
		method.invoke(arl, "这是两个字符串");

		// 方法1:使用增强for来循环输出 集合中的数据
		for (Object item : arl) {
			System.out.println(item);
		}

	}

}




package com.kucun.data.entity.DTO; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.ser.std.StdSerializer; import com.kucun.data.entity.EntityBasis; import java.io.IOException; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.HashMap; public class FullEntitySerializer extends JsonSerializer<Object> { @Override public void serialize(Object value, JsonGenerator gen, SerializerProvider provider) throws IOException { // 处理 List<EntityBasis> 类型 if (value instanceof List) { handleEntityBasisList((List<?>) value, gen, provider); } // 处理单个 EntityBasis 对象 else if (value instanceof EntityBasis) { handleSingleEntityBasis((EntityBasis) value, gen, provider); } // 其他类型使用默认序列化 else { provider.defaultSerializeValue(value, gen); } } // 处理单个 EntityBasis 对象 private void handleSingleEntityBasis(EntityBasis entity, JsonGenerator gen, SerializerProvider provider) throws IOException { gen.writeStartObject(); Field[] fields = entity.getClass().getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); try { Object fieldValue = field.get(entity); String fieldName = field.getName(); // 处理 EntityBasis 类型字段 if (fieldValue instanceof EntityBasis) { Map<String , Integer> map=new HashMap<String, Integer>(); map.put("id", ((EntityBasis) fieldValue).getId()); gen.writeObjectField(fieldName,map); } // 处理 List<EntityBasis> 类型字段 else if (fieldValue instanceof List) { handleEntityBasisListField((List<?>) fieldValue, fieldName, gen); } // 处理其他类型字段 else { provider.defaultSerializeValue(fieldValue, gen); } } catch (IllegalAccessException e) { // 跳过无法访问的字段 } } gen.writeEndObject(); } // 处理 List<EntityBasis> 集合 private void handleEntityBasisList(List<?> list, JsonGenerator gen, SerializerProvider provider) throws IOException { gen.writeStartArray(); for (Object item : list) { if (item instanceof EntityBasis) { handleSingleEntityBasis((EntityBasis) item, gen, provider); } else { provider.defaultSerializeValue(item, gen); } } gen.writeEndArray(); } // 处理 List<EntityBasis> 类型字段 private void handleEntityBasisListField(List<?> list, String fieldName, JsonGenerator gen) throws IOException { if (list.isEmpty() || !(list.get(0) instanceof EntityBasis)) { gen.writeFieldName(fieldName); gen.writeNull(); return; } List<Map<String, Integer>> idList = new ArrayList<>(); for (Object item : list) { if (item instanceof EntityBasis) { Map<String, Integer> idMap = new HashMap<>(); idMap.put("id", ((EntityBasis) item).getId()); idList.add(idMap); } } gen.writeObjectField(fieldName, idList); } }25-06-13 14:29:35.318 DEBUG 13316 — [nio-8080-exec-3] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Can not start an object, expecting field name (context: Object); nested exception is com.fasterxml.jackson.core.JsonGenerationException: Can not start an object, expecting field name (context: Object)] 2025-06-13 14:29:35.323 DEBUG 13316 — [nio-8080-exec-3] o.s.web.servlet.DispatcherServlet : Completed 500 INTERNAL_SERVER_ERROR
06-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值