为了账号安全,请及时绑定邮箱和手机立即绑定

当接口没有它时访问抽象类中的方法的最佳方法是什么?

当接口没有它时访问抽象类中的方法的最佳方法是什么?

紫衣仙女 2022-12-28 16:25:43
基于某人编写的现有架构,我需要扩展我的实现。让我用一个示例代码来解释: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调用克隆方法的最佳方式是什么?
查看完整描述

3 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

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


if (o instanceof BaseConfiguration) {

  ((BaseConfiguration) o).clone(someDictionary, Foo.class);

} else {

   throw new AssertionError("Does not extend BaseConfiguration");

}


查看完整回答
反对 回复 2022-12-28
?
慕村9548890

TA贡献1884条经验 获得超4个赞

如果所有配置都应该是可克隆的,只需将其添加到Configuration.


如果不是全部 - 做类似的事情


interface CloneableConfiguration extends Configuration {

    public <T> T clone(Dictionary<String, Object> properties, Class<T> clazz);

}

然后


public class XMLConfiguration extends BaseConfiguration implements CloneableConfiguration {

    ...

}

但永远不要在你的陈述中使用具体的实现。


查看完整回答
反对 回复 2022-12-28
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

投射你的Configuration对象。由于 API 不在您手中,因此请使用instanceof安全检查


Configuration conf = ConfigurationAdmin.getConfiguration();

if(conf instanceof BaseConfiguration) {

    BaseConfiguration base = (BaseConfiguration) conf;

    base.clone();

}

else {

    // throw an exception of log an error

}


查看完整回答
反对 回复 2022-12-28
  • 3 回答
  • 0 关注
  • 83 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信