上课:
public class Foo {
private List<Bar> bars = new ArrayList<>();
//getter and setter
}
Bar
是一个抽象类型,如下所示:
abstract class Bar {
private TypeEnum type;
// getters and setters
}
给定应提交具体实例的Thymeleaf模板(根据type
枚举值包含自定义片段),提交时会收到以下异常
无法实例化[com.example.Bar]:是抽象类吗?嵌套的异常是java.lang.InstantiationException。
有没有一种方法可以指定实例所属的具体类,以便可以创建正确的实例?
答案 0 :(得分:1)
您需要以某种方式将类型鉴别符从表单传递给控制器。使用此信息,“ disc0 = enum&...”可以借助“ @ModelAttribute”函数实例化Foo对象,该函数使用参数准备“ bars”列表并返回“ foo”实例。这将在请求处理程序方法中实际合并“ @ModelAttribute”参数之前发生。
public class MyCtrl {
@ModelAttribute(„foo“)
public Foo initFoo(Request or params) {
return builtFoo;
}
@RequestMapping(...)
public String submit(@ModelAttribute(„foo“) Foo foo) {
// use the inited and merged foo parameter
return templateName;
}
}
答案 1 :(得分:0)
根据定义,无法实例化abstract
类,这意味着它甚至不能是bean。
抽象类是被声明为抽象的类-它可能包含也可能不包含抽象方法。抽象类不能被实例化,但是可以被子类化。
唯一的解决方案是从类定义标头中删除abstract
。