跳至主要內容

Java扩展-泛型处理问题

晨光-向大约 1 分钟JavaJava语言

1. java接收不同的类对象(包含实体类)的公共方法

示例1:

public class BlankNumUtils {
	//	<U>和Class<U> clazz用来接收实体类(或者其他类)对象的反射 new Users().class,
	//U cla 用来接收实体类对象(或者其他类)new Users()
    public static <U> void usersBlankNum(Class<U> clazz, U cla) {
    	//将传过来的对象进行赋值处理,
    	//此时u可用来代表传过来的对象(本示意中是Users),
    	//此时可以用u调用传过来对象的方法
        U u = clazz.cast(cla);
        //以下是验证此示意中实体类可被操作了
		//getDeclaredFields():获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段。
		//.getClass()是一个对象实例的方法,只有对象实例才有这个方法,具体的类是没有的
        for (Field field : u.getClass().getDeclaredFields()) {
        	//允许获取实体类private的参数信息 field.setAccessible(true);
            field.setAccessible(true);
            try {
                System.out.println(field.getName()+":::"+String.valueOf(field.get(u)));
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    }
}

示例2:

 public <T> void setEffortScoringCriteriaInfo(Map buOrderWorkUserMap, Class<T> clazz, T cla) {
    try {
        T u = clazz.cast(cla);
        for (Field field : u.getClass().getDeclaredFields()) {
            field.setAccessible(true);

            if ("workIterm".equals(field.getName())) {
                buOrderWorkUserMap.put("workIterm", field.get(u));
            }
            if ("description".equals(field.getName())) {
                buOrderWorkUserMap.put("workDescription", field.get(u));
            }
            if ("score".equals(field.getName())) {
                buOrderWorkUserMap.put("workItemScore", field.get(u));
            }
            if ("number".equals(field.getName())) {
                buOrderWorkUserMap.put("workNumber", field.get(u));
            }
        }

    } catch (IllegalAccessException e) {
        throw new RuntimeException(e);
    }
}

参考:

java接收不同的类对象(包含实体类)的公共方法open in new window

java一个方法传入不同的类,并且获取类中的一些共同参数open in new window 😄

java用泛型解决传入不同类型方法,执行不同方法open in new window