【问题标题】:Is there any way to include the name of the interface when implementing the method实现方法时有什么方法可以包含接口的名称
【发布时间】:2017-12-18 18:59:31
【问题描述】:

在实现方法时有什么方法可以包含接口的名称吗?如果我必须实现3个接口,那么我很难提醒我实现的方法来自哪里。

如果我需要 2 个接口来实现相同的方法名称。如何判断我正在实施哪种方法?

public interface BarInt {
void method();
}
public interface GeeInt{
void method();
}
public class Foo implements BarInt, GeeInt{

@Override
public void method() {
    // TODO Auto-generated method stub

}
}

谢谢

【问题讨论】:

  • 您可以随时发表评论。
  • 我知道,但是有什么java技术方法吗?
  • 方法名称应该总是表达方法的作用。在哪个接口中声明方法是技术细节,对代码的读者没有任何用处。
  • 如果 cmets 不够“技术性”,您可以使用 javadoc 注释和包含您所追求的信息的描述
  • @TimothyTruckle:相反,@Override(BarInt.class) 或类似的注释会很有用,原因与@Override 相同:它有助于确保您覆盖您认为的自己,并且有助于明确为什么存在某些方法,如果它们只是为了满足接口契约。例如,add 在不可变的 List 上。

标签: java java-annotations


【解决方案1】:

是的,您可以使用@see javadoc 注释

public interface BarInt {
    void method();
}

public class Foo implements BarInt{

    /**
     * @see BarInt#method()
     */    
    @Override 
    public void method() {
        // TODO Auto-generated method stub
    }
}

【讨论】:

  • 这不是一个坏主意,但值得注意的是,生成的 javadoc 已经有一个指向该方法正在实现的接口方法的链接。请注意 documentation of String.length() 中的 Specified by: 部分。
  • @VGR 当然,但这会在问题代码中包含它。如果我面前有源代码,我什至不会考虑查看 javadoc。当然,我只是使用 IDE 跳转到定义,但这是 OP 要求的
【解决方案2】:

Novaterata 的回答很好,这是一种带有注释的类似方法。


您可以随时添加自己的注释。

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Source {

    Class value();

}

那么你可以这样使用它:

@Source(List.class)
@Override
public boolean add(Object o) {
    return false;
}

对于Sourceretention policy,注释不会成为字节码的一部分。它仅作为阅读器、IDE 和编译器的附加信息。

【讨论】:

    【解决方案3】:

    设计明智的方法名称将反映该方法的作用,并且您应该能够与该方法所属的接口相关联。

    调试明智,大多数编辑器只需几次击键/点击即可为您提供实现的接口和方法。

    【讨论】:

      猜你喜欢
      • 2017-05-15
      • 2011-05-10
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-19
      • 2011-07-26
      相关资源
      最近更新 更多