我是从基类继承的方法 我有5个继承该方法的类并覆盖它但执行相同的操作, 现在我需要根据envoriment变量
更改所有方法以支持其他方案//specific implications
@Override
protected boolean prepareDirectory(Configuration configuration, Logger logger) throws Exception
//logic here as before
if(env===“global”) {
//do something
}
}
当然,如果所有课程都有效,我可以这样做,但有更好的方法可以解决这个问题
由于所有5个类都应在new if
内使用相同的逻辑。
答案 0 :(得分:2)
您可以使用抽象方法实现它。像
这样的东西abstract class BaseClass {
abstract void basePrepare(Configuration configuration, Logger logger);
protected boolean prepareDirectory(Configuration configuration, Logger logger) throws Exception {
if (/* condition */) {
basePrepare(configuration, logger); // implementing class does his stuff
}
}
}
答案 1 :(得分:1)
如果您使用的是Java 8,则应使用默认方法使用Interface。
创建一个接口,然后使用默认访问修饰符创建一个方法,这将是最好的方法。
答案 2 :(得分:1)
你可以通过一个Base类来做到这一点,它可以完成五个类的通用逻辑,同时也可以为每个类提供执行特定逻辑的可能性:
class C {
val myDBconn = ...
val foo = 42
{
val localFoo = foo
List(1,2,3).map(_ + localFoo)
}
}
然后继承这个Base类,实现特定的逻辑:
abstract class Base {
public RETURN_TYPE commonLogic(SOME_PARAMS){
//common logic goes here
}
public abstract RETURN_TYPE specificLogic(SOME_PARAMS);
}