繁星點(diǎn)點(diǎn)滴滴
2023-06-28 16:11:16
我有一堆 RestController 類,看起來(lái)像這樣:public class CategoryController { private final IModelService modelservice; private final ICacheHelper cacheHelper; public CategoryController (IModelService modelservice, ICacheHelper cachehelper) { this.modelservice = modelservice; this.cachehelper = cachehelper; @GetMapping("/foo/bar") public ResponseEntity<Model1> getModel1 () { Model1 model1 = modelService.getModel1(); if (model1 == null) { return ResponseEntity.notFound().build(); } return ResponseEntity.ok().build(); } @GetMapping("/foo/bar/baz") public ResponseEntity<Model2> getModel2 () { Model2 model2 = modelservice.getModel2(); if (model2 =? null) { return ResponseEntity.notFound().build(); } return ResponseEntity.ok().build(); }}所以我創(chuàng)建了一個(gè) Base.class 其中包含以下內(nèi)容public class Base<T> { private final ICacheHelper cachehelper; public Base(ICacheHelper cachehelper) { this.cachehelper = cachehelper; public ResponseEntity<T> simpleResponse(T object, CacheControl cacheControl) { return object != null ? ResponseEntity.ok().cacheControl(cacheControl).body(object) : ResponseEntity.notFound().cacheControl(cacheHelper.getErrorMaxAge()).build();然后,我使用 Base 擴(kuò)展了 CategoryController,但沒(méi)有泛型。所以我可以使用我的 simpleResponse。我理所當(dāng)然地收到了很多關(guān)于 IntelliJ 中未經(jīng)檢查的作業(yè)的警告。我對(duì)泛型了解得越多,我就越明白這根本不是一個(gè)好主意,只有由于遺留原因才可能實(shí)現(xiàn)。有誰(shuí)知道如何更好地做到這一點(diǎn)并以正確的方式使用泛型?我想到了重構(gòu)RestController,并使它們基于returnValue。這意味著我需要為每個(gè)想要返回額外 ControllerClass 的模型創(chuàng)建。那么我可以public class Model1Controller extends Base<Model1> { // do stuff}這是一個(gè)好的 API 設(shè)計(jì)嗎?或者你們有其他想法來(lái)解決這個(gè)問(wèn)題嗎?另一個(gè)想法是我可以使用靜態(tài)方法做某種 util 類,而不是擴(kuò)展 Base.class。但我需要先檢查一下
1 回答

喵喵時(shí)光機(jī)
TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊
您只需從基類中刪除 <T> 并將 <T> 移動(dòng)到泛型方法中即可。它將刪除未經(jīng)檢查的鑄件的警告:
public class Base {
private final ICacheHelper cachehelper;
public Base(ICacheHelper cachehelper) {
this.cachehelper = cachehelper;
}
public <T> ResponseEntity<T> simpleResponse(T object, CacheControl cacheControl) {
// ...
}
public <A> ResponseEntity<A> anotherSimpleResponse(A object, CacheControl cacheControl) {
// ...
}
}
添加回答
舉報(bào)
0/150
提交
取消