如何使用 Class<?> clazz 确定对象类



如何确定实体和请求是否是clazz的同一类型类(例如:if(entity.equals(clazz) && request.equals(clazz)),但不起作用。(在这种情况下,我将ContattoCliente.class分配给clazz,因此如果是true(if (clazz == ContattoCliente.class)(

语言Java版本11。

private Object convertMapMergedToEntity(Object entity, Object request, Class<?> clazz) {
List<Object> resultList = new ArrayList<>();
Object clienteMerged = new Object();
ObjectMapper mapper = JsonMapper.builder().addModule(new JavaTimeModule()).build();
if (clazz == ContattoCliente.class) {
for (int i = 0; i < ((List<Object>) request).size(); i++) {
Object contattoMerged = new Object();
LinkedHashMap<Object, Object> entityMap = mapper.convertValue(((List<Object>) entity).get(i),
LinkedHashMap.class);
LinkedHashMap<Object, Object> requestMap = mapper.convertValue(((List<Object>) request).get(i),
LinkedHashMap.class);
contattoMerged = mapDifferenceMerged2(entityMap, requestMap, clazz);
resultList.add(contattoMerged);
}
return resultList;
} else if (clazz == Cliente.class) {
LinkedHashMap<Object, Object> entityMap = mapper.convertValue(entity, LinkedHashMap.class);
LinkedHashMap<Object, Object> requestMap = mapper.convertValue(request, LinkedHashMap.class);
clienteMerged = mapDifferenceMerged2(entityMap, requestMap, clazz);
}
return clienteMerged;
}

The problem is that if i compare them with Getclass () the condition will always be false, I have also tried everything that is after Dot Getclass ()
System.out.println("entity  ->" + entity.getClass());
System.out.println("request  -> " + request.getClass());
System.out.println("clazz  ->" + clazz.getSimpleName());
Output:
entity -> class org.hibernate.collection.internal.PersistentBag
request -> class java.util.LinkedList
clazz -> ContattoCliente

我不确定这是否是您所期望的,但如果您要检查entityrequest是否与clazz兼容,则可以使用Class.isInstance(Object),也就是说clazz.isInstance(entity) && clazz.isInstance(request)

我认为您正在寻找的方法是isAssignableFrom。这个方法检查一个类是否等于另一个类,或者是否是另一个的子类。

所以你的代码应该像这个

if (ContattoCliente.class.isAssignableFrom(clazz)) {

我知道您需要检查entityrequest是否是同一类的实例,并且您添加了第三个参数clazz,因为您以前尝试检查;类型相等";失败。

这个怎么样:

if( nonNull( entity ) && nonNull( request ) && entity.getClass().equals( request.getClass() ) )
{
…   
}

如果参数的类必须是clazz指定的类,请考虑以下构造:

private <T> Object convertMapMergedToEntity( T entity, T request, Class<T> clazz) 
{
…
}

这里强制编译器entityrequest是由clazz参数指定的类型T;它不再需要运行时检查。

如果您想以任何方式进行运行时检查,请尝试以下操作(但至少添加entityrequestnull检查(:

if( entity.getClass().equals( request.getClass() && entity.getClass().equals( clazz ) ) )
{
…   
}

最新更新