getclass().getmethod 两层实体类
时间: 2023-06-22 16:29:53 浏览: 103
可以理解为在两个不同的实体类中调用 `getClass()` 和 `getMethod()` 方法。第一个 `getClass()` 方法是用于获取对象所属类的 Class 对象,第二个 `getMethod()` 方法是用于获取类中指定方法名和参数类型的 Method 对象。例如,假设有两个实体类 A 和 B,其中 A 中有一个方法名为 `methodA`,参数类型为 `int`,而 B 中有一个方法名为 `methodB`,参数类型为 `String`,则可以使用以下代码分别获取这两个方法的 Method 对象:
```
Class<?> classA = A.class;
Method methodA = classA.getMethod("methodA", int.class);
Class<?> classB = B.class;
Method methodB = classB.getMethod("methodB", String.class);
```
相关问题
list进行升序和降序排序的工具类,其中包含对list中是int类型的、list中是string类型的、是实体类的,如果list中是实体类,以实体类string类型的字段进行进行排序的、以实体类int类型的字段进行排序的等
好的,针对你的问题,我可以给你提供以下代码实现:
```
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class ListSortUtil {
/**
* 对List<Integer>类型的数据进行升序排序
*
* @param list 要排序的List<Integer>
*/
public static void sortIntAsc(List<Integer> list) {
Collections.sort(list);
}
/**
* 对List<Integer>类型的数据进行降序排序
*
* @param list 要排序的List<Integer>
*/
public static void sortIntDesc(List<Integer> list) {
Collections.sort(list, Comparator.reverseOrder());
}
/**
* 对List<String>类型的数据进行升序排序
*
* @param list 要排序的List<String>
*/
public static void sortStringAsc(List<String> list) {
Collections.sort(list);
}
/**
* 对List<String>类型的数据进行降序排序
*
* @param list 要排序的List<String>
*/
public static void sortStringDesc(List<String> list) {
Collections.sort(list, Comparator.reverseOrder());
}
/**
* 对List<T>类型的数据进行升序排序,根据实体类的String类型字段进行排序
*
* @param list 要排序的List<T>
* @param property 实体类的String类型字段
*/
public static <T> void sortEntityStringAsc(List<T> list, String property) {
Collections.sort(list, new Comparator<T>() {
@Override
public int compare(T o1, T o2) {
String value1 = EntityUtil.getPropertyValue(o1, property);
String value2 = EntityUtil.getPropertyValue(o2, property);
return value1.compareTo(value2);
}
});
}
/**
* 对List<T>类型的数据进行降序排序,根据实体类的String类型字段进行排序
*
* @param list 要排序的List<T>
* @param property 实体类的String类型字段
*/
public static <T> void sortEntityStringDesc(List<T> list, String property) {
Collections.sort(list, new Comparator<T>() {
@Override
public int compare(T o1, T o2) {
String value1 = EntityUtil.getPropertyValue(o1, property);
String value2 = EntityUtil.getPropertyValue(o2, property);
return value2.compareTo(value1);
}
});
}
/**
* 对List<T>类型的数据进行升序排序,根据实体类的int类型字段进行排序
*
* @param list 要排序的List<T>
* @param property 实体类的int类型字段
*/
public static <T> void sortEntityIntAsc(List<T> list, String property) {
Collections.sort(list, new Comparator<T>() {
@Override
public int compare(T o1, T o2) {
int value1 = EntityUtil.getPropertyValueInt(o1, property);
int value2 = EntityUtil.getPropertyValueInt(o2, property);
return Integer.compare(value1, value2);
}
});
}
/**
* 对List<T>类型的数据进行降序排序,根据实体类的int类型字段进行排序
*
* @param list 要排序的List<T>
* @param property 实体类的int类型字段
*/
public static <T> void sortEntityIntDesc(List<T> list, String property) {
Collections.sort(list, new Comparator<T>() {
@Override
public int compare(T o1, T o2) {
int value1 = EntityUtil.getPropertyValueInt(o1, property);
int value2 = EntityUtil.getPropertyValueInt(o2, property);
return Integer.compare(value2, value1);
}
});
}
}
/**
* 实体类工具类
*/
class EntityUtil {
/**
* 获取实体类的属性值,返回String类型
*
* @param obj 实体类对象
* @param fieldName 属性名称
* @return 属性值,String类型
*/
public static String getPropertyValue(Object obj, String fieldName) {
try {
String methodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
return String.valueOf(obj.getClass().getMethod(methodName).invoke(obj));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获取实体类的属性值,返回int类型
*
* @param obj 实体类对象
* @param fieldName 属性名称
* @return 属性值,int类型
*/
public static int getPropertyValueInt(Object obj, String fieldName) {
try {
String methodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
return Integer.parseInt(String.valueOf(obj.getClass().getMethod(methodName).invoke(obj)));
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
}
```
其中,我们定义了一个 ListSortUtil 工具类,用于对 List 进行升序和降序排序。对于 List 中是 int 类型的数据,我们可以直接使用 Collections.sort() 方法进行排序;对于 List 中是 String 类型的数据,我们也可以直接使用 Collections.sort() 方法进行排序。而对于 List 中是实体类的数据,我们则需要通过实体类工具类 EntityUtil 来获取实体类的属性值,并根据属性值进行排序。
你可以根据需要,调用其中的方法来对 List 进行排序。
java循环遍历实体类
Java循环遍历实体类可以使用反射机制来实现。反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;并且能够调用任意一个方法和属性。具体实现步骤如下:
1.获取实体类的Class对象,可以使用Class.forName()方法或者实体类的.class属性。
2.通过Class对象的getDeclaredFields()方法获取实体类的所有属性。
3.遍历属性数组,通过Field对象的getName()方法获取属性名,getType()方法获取属性类型。
4.通过Class对象的getMethod()方法获取实体类的setter和getter方法,方法名为"set"+属性名和"get"+属性名。
5.通过Method对象的invoke()方法调用setter和getter方法,实现对实体类属性的赋值和获取值。
下面是一个示例代码,假设有一个实体类Person,包含属性name和age:
```java
public class Person {
private String name;
private int age;
// 省略setter和getter方法
}
public static void main(String[] args) throws Exception {
Person person = new Person();
Class clazz = person.getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
String fieldName = field.getName();
Class fieldType = field.getType();
Method setter = clazz.getMethod("set" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1), fieldType);
Method getter = clazz.getMethod("get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1));
setter.invoke(person, "张三");
System.out.println(getter.invoke(person));
}
}
```
阅读全文