我很清楚oop的多态性和继承概念,但我需要知道实现类。例如:
public CommonReadRepository<?> getReadRepository(String tableName) {
if (tableName == null)
return null;
switch (tableName) {
case "order":
return orderRepository;
...
}
return null;
}
接口orderRepository
扩展CommonReadRepository
,由于我的要求,我需要访问orderRepository中定义的函数。
CommonReadRepository<?> repository=getReadRepository("order");
有没有办法检查CommonReadRepository
的实现(子)类或接口?
当然,我总能做到这样的事情:
if(tableName=="order")
return (OrderRepository)CommonReadRepository<?>;
我尝试调试getReadRepository("order")
,但它给了我一个JdkDynamicAopProxy
的实例,我不确定它是如何工作的。
if(interface is instanceof xyz class) 我不想使用它,因为我有100个课程,我想把它作为最后的手段...或换句话说 我不知道xyz类
由于
答案 0 :(得分:1)
以下是检查返回的Object是否是指定类的实例的一种方法:
CommonReadRepository<?> repository=getReadRepository("order");
if(repository instanceof WhatEverSubclass) {
// do something
}
但是使用这种方法并不是OOP应该如何完成的。如果你的类都实现了相同的接口,为什么不定义一个公共方法,然后在所有子类中使用它,但每次都以不同的方式实现它。
答案 1 :(得分:0)
我认为,你试图做的不是让你到任何地方。
您可以使用反射工具(https://github.com/ronmamo/reflections)找到继承界面的所有可用类。我用它作为依赖注入器,它非常可靠。
然而,为什么不使用instanceof运算符来确保对象的类型正确:
if( repository instanceof OrderRepository) return (OrderRepository)repository;
但是,这不会改变函数的返回类型,你需要在函数之外再次检查返回值的类型。
更新:如果对数百个对象发生这种情况,您可以更改getRepository方法以返回您作为参数提供的类型:<T> getRepository(String name, Class<T> expectedType)
这将允许您OrderRepository o = getRepository("order", OrderRepository.class);