具有泛型类型的Java子窗体



我有类似的Form

@Data
public class Form<T> {
private T dynamicSubForm;
private String firstName;
private Short age;
}
@Data
public class SubForm1 {
private String nickname;
...
}
@Data
public class SubForm2 {
private Short height;
...
}

我有像这个一样的RestController

@RestController
public class MyRestController {
@GetMapping(“/form1”)
public ResponseEntity<String> getForm1(Form<SubForm1> form) {
form.getDynamicSubForm().getNickname(); // Error occurs here that type of form.dynamicSubForm is "Object" instead of "SubForm1".
return new ResponseEntity<>("Hello World!", HttpStatus.OK);
}
@GetMapping(“/form2”)
public ResponseEntity<String> getForm2(Form<SubForm2> form) {
form.getDynamicSubForm().getHeight(); // Error occurs here that type of form.dynamicSubForm is "Object" instead of "SubForm2".
return new ResponseEntity<>("Hello World!", HttpStatus.OK);
}
}

我的问题是如何用目标泛型类型实例化dynamicSubForm。

问题的原因是Java泛型将在运行时被擦除。你可以通过构造方法来解决这个问题。为表单提供午餐结构和参数结构。

public Form(){}
public Form(Form form, Class cls){
this.dynamicSubForm = (cls) form.getDynamicSubForm;
}

最新更新