多选项组合状态工具类
工具类
package com.example.demo.weiyunsun;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class MultipleChoiceUtil<T> {
private static final String SET_METHOD_PREFIX = "set";
public static <T> T stateAnalysis(int num,Class<T> t1) throws Exception {
T t = t1.newInstance();
Field[] fields = t1.getDeclaredFields();
for (int i = 0, a = fields.length; i < a; i++) {
int flag ;
fields[i].setAccessible(true);
if (i == 0) {
flag = (num & 2 >> 1) == 2 >> 1 ? 1 : 0;
} else {
flag = (num & 2 << i - 1) == 2 << i - 1 ? 1 : 0;
}
String name = fields[i].getName();
String fileName = name.substring(0,1).toUpperCase() + name.substring(1);
Class<?> type = fields[0].getType();
Method m = t1.getMethod(SET_METHOD_PREFIX+fileName,type);
m.invoke(t,flag);
}
return (T) t;
}
public static <T> int stateCombination(T t) throws Exception {
int status = 0;
Class<?> aClass = t.getClass();
Field[] fields = aClass.getDeclaredFields();
for (int i = 0, a = fields.length; i < a; i++) {
fields[i].setAccessible(true);
Integer temp = (int) fields[i].get(t);
if (temp == 1 && i == 0) {
status += 1;
} else {
if (temp == 1) {
status += (2 << i - 1);
}
}
}
return status;
}
public static void main(String[] args) throws Exception {
DeliveryBillsConfigEntity rule = new DeliveryBillsConfigEntity();
rule.setSamePayment(1);
rule.setSameAddress(1);
rule.setSameAccountNo(1);
rule.setSameShop(1);
rule.setSameMerchant(1);
rule.setSameSalesChannel(1);
int rule1 = stateCombination(rule);
System.out.println(rule1);
DeliveryBillsConfigEntity resolve = stateAnalysis(1, DeliveryBillsConfigEntity.class);
System.out.println(resolve.toString());
}
}
实体类
package com.example.demo.weiyunsun;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class DeliveryBillsConfigEntity {
private int samePayment;
private int sameAddress;
private int sameAccountNo;
private int sameSalesChannel;
private int sameMerchant;
private int sameShop;
}
运行结果
public static void main(String[] args) throws Exception {
DeliveryBillsConfigEntity rule = new DeliveryBillsConfigEntity();
rule.setSamePayment(1);
rule.setSameAddress(1);
rule.setSameAccountNo(1);
rule.setSameShop(1);
int rule1 = stateCombination(rule);
System.out.println("多选组合状态值:" + rule1);
DeliveryBillsConfigEntity resolve = stateAnalysis(rule1, DeliveryBillsConfigEntity.class);
System.out.println("状态值解析:"+resolve.toString());
}
运行结果如下:
多选组合状态值:39
状态值解析:DeliveryBillsConfigEntity(samePayment=1, sameAddress=1, sameAccountNo=1, sameSalesChannel=0, sameMerchant=0, sameShop=1)
package com.example.demo.weiyunsun;
import lombok.Data;
@Data
public class User {
private int shiMing;
private int bangKa;
private int youXiang;
private int shouJi;
}
user测试
public static void main(String[] args) throws Exception {
User user = new User();
user.setBangKa(1);
int rule1 = stateCombination(user);
System.out.println("多选组合状态值:" + rule1);
User resolve = stateAnalysis(rule1, User.class);
System.out.println("状态值解析:"+resolve.toString());
}
运行结果:
多选组合状态值:2
状态值解析:User(shiMing=0, bangKa=1, youXiang=0, shouJi=0)