请处理这个基本问题。
我有一个abstract class C1
which 扩展了另一个abstract class C0
并被多个扩展sub-classes (C21 and C22)
。
@Component
public abstract class C0 {
protected abstract String getCaller();
//Some other methods.
}
.
public abstract class C1 extends C0 {
//Set of methods which are used by children and then calls methods of C0 which then use getCaller();
}
.
@Controller
public class C21 extends C1 {
@RequestMapping(value = "abc", method = RequestMethod.GET)
public String start(@RequestParam(value = "kw", required = true) String p1,
@RequestParam(value = Constant.REQUEST_PARAM_KEYWORDID, required = true) long p2) throws Exception {
//Some processing and calls controllers defined in abstract class C1
return "200";
}
@Override
protected String getCaller() {
return "C21";
}
}
.
@Controller
public class C22 extends C1 {
@RequestMapping(value = "abc", method = RequestMethod.GET)
public String start(@RequestParam(value = "kw", required = true) String p1,
@RequestParam(value = Constant.REQUEST_PARAM_KEYWORDID, required = true) long p2) throws Exception {
//Some processing and calls controllers defined in abstract class C1
return "200";
}
@Override
protected String getCaller() {
return "C22";
}
}
C0 包含一个抽象方法getCaller();
C21 和 C22 的调用者是不同的,但它们可以通过传递给start(p1,p2)
这些类的唯一方法的参数来识别。
start(p1,p2)
在两个课程中都做类似的事情。C21 和 C22 的唯一区别是其实现getCaller()
是固定的,并且无论如何都可以从 start 的参数中提取。所以,我决定创建单个类而不是 C21 和 C22。
我不能这样创建setCaller()
,我想在抽象中创建final method
一个私有变量,它可以用方法的参数填充并返回(从 调用)。caller
class C1
start
getCaller()
abstract class C0
这是正确的方法吗?有没有更好的方法或模式呢?