【问题标题】:How can I hide all java.lang.Object methods from code completion?如何从代码完成中隐藏所有 java.lang.Object 方法?
【发布时间】:2010-10-09 09:33:03
【问题描述】:

我想为现有的类库创建一些简单的包装类。为了使语法易于阅读和猜测(通过代码完成),我想删除 java.lang.Object 的方法。

问题是java中所有非原子的东西都继承自Object,因此有这些方法。我已经尝试通过枚举和接口创建包装语法,但没有成功;因为 enumsinterfaces 也是 java.lang.Objects

java.lang.Object 有九种我不想在我的接口的代码完成中看到的方法。这是我要删除的内容(红色)和我要保留的内容(绿色):

alt text http://ju.venile.de/upload/java-lang-object-methods.png

以下是一些示例代码,用于围绕现有类创建漂亮的包装器(构建器模式):

public interface IMySyntax{
  public IMySyntax myMethod1();
  public IMySyntax myMethod2();
}

public class MyBuilder implements IMySyntax{
  public static IMySyntax build(){ return (IMySyntax) new MyBuilder() }
  public IMySyntax myMethod1(){ /* do something */ return (IMySyntax) this }
  public IMySyntax myMethod2(){ /* do something */ return (IMySyntax) this }     
}

新包装器代码的用法应如下所示:

MyBuilder.build()
         .myMethod1()
         .myMethod2();

将构建器的所有this 语句转换为接口会降低方法的可见性,例如如果构建器实现了多个接口。不幸的是,所有 java.lang.Object 方法都将保留。

如果这种方法隐藏在 Java 中是可能的(也许使用注释?),我可以创建一个很好的库,它与 IDE 无关(到处都有很好的代码完成)。如果没有,那么至少 Eclipse IDE(可能是插件?)可能有一个技巧,可以提供 java.lang.Object 方法隐藏。

【问题讨论】:

  • 我认为您可能希望将此范围限制为特定的 IDE(如 Eclipse)。我 99% 确信 IntelliJ IDE 开箱即用(即,它将最相关的方法放在首位)。

标签: java syntax syntactic-sugar


【解决方案1】:

对于 Eclipse 3.4,至少您可以执行以下操作:

1) 转到首选项 -> Java -> 外观 -> 类型过滤器 2) 点击添加,输入java.lang.Object

现在在代码辅助中,直接从java.lang.Object 继承的方法将消失

【讨论】:

  • 谢谢!如果没有人很快提出基于 java 的答案,我会接受这个。
  • 我推荐这种方法。您还可以告诉 eclipse 使用哪些类型的提案。
  • 如果你需要 toString 的问题,你完全错过了它。仅当您键入两个或更多字符时,才需要更复杂的解决方案来匹配它们,或者将列表末尾放置并默认将它们变灰或类似的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
  • 1970-01-01
  • 2012-09-27
  • 2011-06-15
  • 2014-07-11
  • 2013-09-01
  • 1970-01-01
相关资源
最近更新 更多