我有一个设置,我想有一个方法来处理不同的报告模板(每个模板的字段比其他模板少/多),方法是传入报告名称并在运行时创建对象。然后检查每个字段是否存在,如果存在,则设置值。然后将对象序列化为JSON以返回。
我有一个测试设置如下。问题是我无法获取已创建对象的字段列表。物体。getClass()。getDeclaredFields()始终提供空数组。
我想看看你是否能发现任何错误,或者是否有更聪明的方法。
主要逻辑:
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
public class Test {
public static void main(String[] args)
throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException,
InvocationTargetException, NoSuchMethodException, SecurityException {
Class<?> cls = Class.forName("CustomerReservationReportBasic");
CustomerReservationReport customerReservationReport = (CustomerReservationReport) cls.getDeclaredConstructor()
.newInstance();
System.out.println(hasField(customerReservationReport, "name"));
}
public static boolean hasField(Object object, String fieldName) {
return Arrays.stream(object.getClass().getDeclaredFields()).anyMatch(f -> f.getName().equals(fieldName));
}
}
型号:
这是父类,所有基本的报告字段都在这里
import java.math.BigDecimal;
import lombok.Data;
@Data
public abstract class CustomerReservationReport implements Comparable<CustomerReservationReport> {
private String name;
private int num_of_visit;
private BigDecimal total_spend;
@Override
public int compareTo(CustomerReservationReport customerReservationReport) {
return this.getName().compareTo(customerReservationReport.getName());
}
}
这将是各种报告之一。
public class CustomerReservationReportBasic extends CustomerReservationReport {
public CustomerReservationReportBasic() {
super();
}
}
类::getDeclaredFields()
返回字段对象数组,该数组反映由该类对象表示的类或接口声明的所有字段。这包括公共、受保护、默认(包)访问和私有字段,但不包括继承的字段。
您还需要获取对象超类的字段。
我有一个Java类来表示数据库中的一个条目。所以每个字段都是数据库中的一列。 当我想更新该数据库时,我会构造一个ContentValures对象。 是 速度快于 的绝对性能是什么?我希望有人能真正指出是如何工作的。我知道容器的大小调整是如何工作的,但我对如何工作以及如何执行一无所知。
问题内容: 我有一些调用的代码。 不过,这将返回null。 当我从命令行而不是从Eclipse启动相同的代码时,它将返回一个类加载器。 我可以破解代码来做到这一点… 两者都被编译并使用相同的JVM运行。(我确定99.99%)。 任何人都知道为什么第一个会为类加载器返回null? 编辑: 我的问题是:“没有人知道为什么同一类通过Eclipse启动时会返回null,而从命令行加载时会返回类加载器。”
Javascript getClass() 函数 getClass() -- 返回一个 JavaObject 的 JavaClass。 语法: getClass( javaObject ); 参数说明: javaObject -- 一个 JavaObject 对象 返回值: javaObject 的 JavaClass 对象 说明: getClass() 函数可接受一个 JavaObject
问题内容: 我看到使用和运算符超过运算符时性能有所提高。 有没有使用或使用的指南? 给定一个场景:我知道要匹配的确切类,即,(这些是最终类),等等。 使用操作员的做法不好吗? 问题答案: 和表现不同的原因是他们在做不同的事情。 测试左侧对象引用(LHS)是右侧类型(RHS)的实例 还是某个子类型 。 测试类型是否相同。 因此,建议您忽略性能问题,并使用可为您提供所需答案的替代方法。 使用操作员是不
我是Java新手,我正在尝试实现一个链表(我知道有一个链表类用于此目的,但从头开始就可以让我理解该语言在内部是如何工作的) 在main方法中,我声明了4个节点并初始化了3个。链表的头节点设置为空。第一次使用参数head和newNode调用add函数时,head为null,所以我初始化head并将newNode的值赋给它。在main方法中,我希望head对象应该从add方法中设置新的值。但头仍然是空