我写了个方法 view(List lsa) 把 lsa 的内容显示出
问题1:lsa内的数据类型不是固定的,可能是List<User> lsa (这个User是自定义的类)
问题2:我怎么在方法内获取这个lsa内的数据类型
问题3:我想应该增加参数告之这个方法lsa内的数据类型,但不知怎么写?
问题1:lsa内的数据类型不是固定的,可能是List<User> lsa (这个User是自定义的类)
问题2:我怎么在方法内获取这个lsa内的数据类型
问题3:我想应该增加参数告之这个方法lsa内的数据类型,但不知怎么写?
java 有类型比较 关键字instanceof
sum instanceof java.lang.String判断sum是否是String类型(这里要写全称java.lang.String)只需要判断一下 然后根据具体实体操作具体函数如果类很多就建多个方法
view (List<User> user)
view (List<Student> student)
传入:
view(list, User.class);
定义:
static void view(List lsa, Class type){还有,你可以从List中的任一个元素对象上调用getClass()方法找出元素所属的类型。如果单纯是打印,没必要这么做,为User类定义好toString()方法就行了。
最后实现Comparable接口,就可以对任意类型都可以进行比较了,就不用在后台在判断了,
不知道对你有没有帮助。
private static String getMethodName(String fildeName) {
byte[] items = fildeName.getBytes();
items[0] = (byte) ((char) items[0] - 'a' + 'A');
return new String(items);
}
public void view(List<?> list) throws Exception {
if (list != null && list.size() > 0) {
for (Object object : list) {
// 拿到该类
Class<?> clz = object.getClass();
// 获取实体类的所有属性,返回Field数组
Field[] fields = clz.getDeclaredFields();
for (Field field : fields) {// --for() begin // 如果类型是String
if (field.getGenericType().toString().equals("class java.lang.String")) { // 如果type是类类型,则前面包含"class ",后面跟类名
Method m = (Method) object.getClass().getMethod("get" + getMethodName(field.getName()));// 拿到该属性的gettet方法
String val = (String) m.invoke(object);// 调用getter方法获取属性值
if (val != null) {
System.out.println(val.toString());
}
} // 如果类型是Integer
if (field.getGenericType().toString().equals("class java.lang.Integer") || field.getGenericType().toString().equals("int")) {
Method m = (Method) object.getClass().getMethod("get" + getMethodName(field.getName()));
Integer val = (Integer) m.invoke(object);
if (val != null) {
System.out.println(val.toString());
} } // 如果类型是Double // 如果类型是boolean 或封装类Boolean 这里有点说名默认的boolean或者Boolean的gettet是 isXxxx的 如果找不到gettet自己手动改下
if (field.getGenericType().toString().equals("class java.lang.Boolean")|| field.getGenericType().toString().equals("boolean") ) {
Method m = (Method) object.getClass().getMethod(field.getName());
Boolean val = (Boolean) m.invoke(object);
if (val != null) {
System.out.println(val.toString());
} }
// 如果类型是Date
if (field.getGenericType().toString().equals("class java.util.Date")) {
Method m = (Method) object.getClass().getMethod("get" + getMethodName(field.getName()));
Date val = (Date) m.invoke(object); if (val != null) {
System.out.println(val.toString());
} }
// 如果类型是Short }// --end of for()
} }
}