对于 Lombok 中的 @AllArgsConstructor 注解生成的有参构造方法,默认情况下是通过反射机制来实例化对象并传入参数的。

在使用 @AllArgsConstructor 注解时,Lombok 会在编译时期生成相应的构造方法代码,并使用反射机制来创建对象实例。这使得我们无需手动编写繁琐的构造方法,可以简化代码。

下面是一个示例:

java import lombok.AllArgsConstructor; import lombok.Data;

@Data @AllArgsConstructor public class MyClass { private int id; private String name; } 在上述示例中,@AllArgsConstructor 注解会自动生成一个包含所有字段的有参构造方法。当你使用该构造方法创建对象时,Lombok 会在运行时自动使用反射来实例化对象并传入参数。

例如:

java MyClass obj = new MyClass(1, "John"); 上述代码会调用由 @AllArgsConstructor 自动生成的构造方法,通过反射机制创建 MyClass 对象,并将参数 1 和 "John" 传递给对应的字段。

因此,通过 Lombok 生成的有参构造方法是可以通过反射拿到的。请确保你已正确引入 Lombok 的依赖并启用 IDE 中的 Lombok 插件,以获得预期的效果。

但是不包含无参构造 Class aClass = Class.forName("com.example.demo.demo.SOME"); SOME some1 = (SOME) aClass.newInstance(); System.out.println(some1); Constructor declaredConstructor = aClass.getDeclaredConstructor(String.class, String.class, String.class); SOME some = (SOME) declaredConstructor.newInstance("zhangsan", "14", "rmb"); System.out.println(some);

@Data @AllArgsConstructor public class SOME { /* public SOME() { }*/

/* public SOME(String area, String no, String like) { this.area = area; this.no = no; this.like = like; }*/

private String area;

private String no;

private String like;

private int RMB;



public String getArea() {
    return area;
}

public void setArea(String area) {
    this.area = area;
}

public String getNo() {
    return no;
}

public void setNo(String no) {
    this.no = no;
}

public String getLike() {
    return like;
}

public void setLike(String like) {
    this.like = like;
}

}

Exception in thread "main" java.lang.InstantiationException: com.example.demo.demo.SOME at java.base/java.lang.Class.newInstance(Class.java:639) at com.example.demo.demo.tabel.RegexExample.main(RegexExample.java:17) Caused by: java.lang.NoSuchMethodException: com.example.demo.demo.SOME.() at java.base/java.lang.Class.getConstructor0(Class.java:3585) at java.base/java.lang.Class.newInstance(Class.java:626) ... 1 more


综上在使用反射场景的使用是慎重使用次注解