抽象类中的可选方法实现
我正在研究一些框架,我得到了一个抽象类,应该实现。
现在我得到了一些用户应该能够配置的其他东西,但它是可选的。
因此,与其使用抽象方法,不如使用抽象方法:
public abstract class AbstractModule {
public void doSomething() {
if (logMessage() != null)
System.out.println(logMessage());
doStuff();
}
protected abstract String logMessage(); // I'm optional
protected abstract void doStuff();
}
我想到的只是检查一个接口实现:
public interface Log {
String logMessage();
}
public abstract class AbstractModule {
public void doSomething() {
if (this instanceof Log) {
if (((Log) this).logMessage() != null)
System.out.println(((Log) this).logMessage());
}
doStuff();
}
protected abstract void doStuff();
}
因此,如果有人使用接口 Log 实现 AbstractModule,它也将显示该消息。我看到的实现者的好处是:她不需要关心实现logMessage(),就像在第一个例子中一样。这是一种有效的方法,还是应该以不同的方式进行?
提前致谢!
此致敬意