我正在尝试通过灵活的大小写调用子映射器方法 但是在这种情况下,我们不知道会调用哪个方法,即使它扩展了父映射器。 [spring boot框架与mybatis]
// ParentMapper
public interface ParentMapper
{
// List<Map<String, String> findAll();
}
// Child1Mapper
public interface Child1Mapper extends ParentMapper
{
List<Map<String, String> findAll();
}
// Child2Mapper
public interface Child2Mapper extends ParentMapper{
List<Map<String, String> findAll();
}
@Autowired
Child1Mapper child1Mapper;
@Autowired
Child2Mapper child2Mapper;
// some class file
public ParentMapper getMapper(String param){
switch(param){
case "case1" : child1Mapper;
case "case2" : child2Mapper;
... 10 more..
}
}
public class example{
public void somethid(){
// this logic is in some biz
ParentMapper mapper = getMapper("case1"); // <----`-` we do not know where `findAll method` located is in
mapper.findAll();
}
}
如何调用子映射器方法
最佳答案
如果您将 case1
传递给 getMapper(String param)
方法,它在代码中很清楚,它将返回 return new Child1Mapper()
child1mapper 对象,所以如果你调用 findAll()
方法然后 child1mapper
类 findAll()
方法将被调用
如果你传递 case2
那么你将得到 child2mapper
对象 (就像 Parentmapper p = new Child2Mapper())
所以如果你调用 findAll()
方法 (p.findAll())
child2mapper findAll()
方法将被调用
child1mapper
和child2mapper
都是parentmapper
的子类,但是child1mapper
和child2mapper
所以不存在方法冲突的概念
关于java - 如何使用扩展父映射器的子映射器方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51887519/