尝试添加带有方法的基本接口,以便所有派生类都必须实现该方法或使用默认方法。使该方法可调用的最佳方法是什么?请参阅下面的代码块中的注释。
public interface IA{}
public interface IB{
public Integer doWork();
}
public interface IC extends IB{
}
class B implements IB{
Integer doWork(){
return 2;
}
}
class C extends B implements IC{
@Override
Integer doWork(){
return 7;
}
}
//What do I need to do to cast clazz to an object so I can call the derived class' doWork method?
private Integer newClient(Class<T> clazz){
((B) clazz).doWork();
}
答案 0 :(得分:1)
最终找到了解决方案:
B.class.cast(clazz);
答案 1 :(得分:0)
关于如何确保您调用覆盖基类的派生类的方法,这是Java的本机行为。
示例程序:
BizFormItemEvents.Insert.After
输出:
public class Foo {
static class A {
int get() { return 0; }
}
static class B extends A {
@Override
int get() { return 1; }
}
public static void main(final String[] args)
{
A a = new A();
B b1 = new B();
A b2 = new B();
printA(a);
printA(b1);
printA(b2);
}
public static <T extends A> void printA(T bObj) {
System.out.println(bObj.get());
}
}
请注意,即使b2是A类型且b1是B类型,从b2 :: get():: int返回的输出也与b1 :: get():: int相同。这是因为即使我们在b2中仅具有对A类的引用,对象实现仍然是B。
答案 2 :(得分:0)
似乎您只想知道如何实例化Class。假设它具有默认构造函数,则可以通过以下方式实现:
private Integer newClient(Class<B> clazz){
try {
((B) (clazz.getConstructor().newInstance())).doWork();
} catch ...
}