首页 > 解决方案 > 当接口没有它时,访问抽象类中的方法的最佳方法是什么?

问题描述

基于某人编写的现有架构,我需要扩展我的实现。让我用一个示例代码来解释:

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

调用克隆方法的最佳方法是什么?

标签: javainterface

解决方案


BaseConfiguration如果对象实例通过instanceof检查,您可以在转换为之后调用它:

if (o instanceof BaseConfiguration) {
  ((BaseConfiguration) o).clone(someDictionary, Foo.class);
} else {
   throw new AssertionError("Does not extend BaseConfiguration");
}

推荐阅读