【问题标题】:Java interface's deprecated methods must be implemented or not?Java接口的弃用方法是否必须实现?
【发布时间】:2016-07-04 04:46:52
【问题描述】:

我正在将0.98.10的HBase代码更新为1.1.5,但是编译器显示myWalObserver不再实现原来的接口WALObserver了。

编译器输出:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-
plugin:3.1:compile (default-compile) on project observer: Compilation failure
[ERROR] /Users/zhangsong.zs/git/HBaseObserver/src/main/java/com/gavin/observer/
DataSyncWALObserver.java:[39,8] com.gavin.observer.DataSyncWALObserver
 is not abstractand does not override abstract method  
postWALWrite(org.apache.hadoop.hbase.coprocessor.ObserverContext<? extends org.apache.hadoop.hbase.coprocessor.WALCoprocessorEnvironment>,
org.apache.hadoop.hbase.HRegionInfo,org.apache.hadoop.hbase.wal.WALKey,
org.apache.hadoop.hbase.regionserver.wal.WALEdit) in 
org.apache.hadoop.hbase.coprocessor.WALObserver

所以在1.1.5版本的同一个接口中增加了一些新的API,旧的API被弃用了。旧代码不再工作,这对开发人员不利。

所以我想问:我是否还必须实现已经被弃用的旧接口方法?

【问题讨论】:

    标签: java api interface hbase deprecated


    【解决方案1】:

    是的,您必须实现已弃用的接口方法。但是,您可以让它们抛出 UnsupportedOperationException 以向调用者发出信号,表明它们实际上并未实现。

    【讨论】:

    • 弃用方法的一个定义,不抛出 UnsupportedOperationException:@Deprecated boolean preWALWrite(ObserverContext ctx, HRegionInfo info, HLogKey logKey, WALEdit logEdit) throws IOException;
    • @Rubby 太棒了!因此,实现该方法,并在其主体中包含throw new UnsupportedOperationException();。 (注意:UnsupportedOperationException 是未经检查的异常,不需要在throws 子句中声明。)
    【解决方案2】:

    是的,你必须。 Deprecated 表示不建议使用。任何实现仍然必须实现它。

    【讨论】:

      【解决方案3】:

      这是代码维护技术。

      1. 不推荐使用的方法是类/接口的一部分。
      2. 您可以选择在派生类的此类方法内抛出异常。

      这里有一些背景:

      1. 通常,如果发现接口函数冗余/不可用,则将其标记为已弃用。
      2. 我们可以选择如何在您的 IDE 中处理已弃用的注解编译/错误报告。

      【讨论】:

        猜你喜欢
        • 2021-05-04
        • 2016-06-16
        • 1970-01-01
        • 2015-04-29
        • 2011-11-06
        • 2013-01-31
        • 1970-01-01
        • 1970-01-01
        • 2018-08-04
        相关资源
        最近更新 更多