java - 当接口没有它时,访问抽象类中的方法的最佳方法是什么?
问题描述
基于某人编写的现有架构,我需要扩展我的实现。让我用一个示例代码来解释:
interface Configuration{
public String getPID();
public void display();
}
public abstract class BaseConfiguration implements Configuration {
@Override
public String getPID(){
//some code here
}
@Override
public void display(){
//some code here
}
abstract public <T> T clone(Dictionary<String, Object> properties,
Class<T> clazz);
}
public class XMLConfiguration extends BaseConfiguration{
public <T> T clone(Dictionary<String, Object> properties,
Class<T> clazz){
// implementation
}
}
public class ConfigurationAdmin
{
public static Configuration getCondfiguration(){
return new XMLConfiguration();
}
}
我可以理解,无法clone
从接口调用方法。
Configuration conf = ConfigurationAdmin.getConfiguration();
conf.clone(someDictionary, Foo.class) // Gives compilation error
调用克隆方法的最佳方法是什么?
解决方案
BaseConfiguration
如果对象实例通过instanceof
检查,您可以在转换为之后调用它:
if (o instanceof BaseConfiguration) {
((BaseConfiguration) o).clone(someDictionary, Foo.class);
} else {
throw new AssertionError("Does not extend BaseConfiguration");
}
推荐阅读
- r - 循环应用,创建表的应用函数
- android - CoordinatorLayout.DefaultBehaviour 已弃用,没有其他选项
- flutter - 如何在循环中使用 Bloc 来更改状态
- plotnine - plotnine 设置平面图的固定高度和宽度
- flutter - 在 Flutter 中为 DropdownButton 创建项目列表
- apollo - 有什么方法可以在 Apollo Studio 中格式化日期字段的渲染?
- c# - 从控制器接收模型(具有 IEnumerable 属性)时的奇怪行为
- project-reactor - Spring Cloud Stream + Kafka 动态目的地 + 错误处理
- ios - 升级到 xcode 12.5 后无法在调试中构建 ios 应用程序
- python - 抓取html,不断收到我无法解释的错误