【问题标题】:Static and Final Rules of Interface [duplicate]接口的静态和最终规则[重复]
【发布时间】:2019-08-12 08:43:26
【问题描述】:

JAVA中实例字段的具体含义是什么?

根据我对 JAVA 的了解:

接口不能包含实例字段。可以出现在接口中的唯一字段必须声明为 static 和 final。

但是,当我尝试如下:

interface TempIn
{
        TakeInput tv=null;
        String name="";
        int temp=0;
        void printT();
}

它正在工作。如何 ? 迷茫……

【问题讨论】:

  • 编译器会在编译时为您添加静态最终关键字。

标签: java interface static final


【解决方案1】:

简单:所有这些字段都是静态和最终的默认情况下

因此,java 语言允许你写下隐含的东西。

换句话说:想象一下“编译器”为您输入关键字。

但我同意,这有点令人困惑。它也变成了一种“风格”的东西。在 Java 的早期,很多人会将这些多余的关键字添加到他们的接口中。另一方面,“干净的代码”告诉我们要避免代码中的冗余。而现在,像 IntelliJ 这样的 IDE 甚至会在使用关键字时给您警告。所以,我的建议:

  • 不要碰旧的、现有的代码
  • 与您的团队交谈,决定什么对您有意义,对于新代码,请遵守该协议

【讨论】:

  • 是的,就是这样:另一方面,“干净的代码”告诉我们要避免代码中的冗余。知道了。谢谢。
  • @JaiminModi 没错。这是我的主要观点。请注意我刚刚所做的更新 ;-)
  • 知道了。默认情况下,接口内的所有这些字段都是静态的和最终的。默认情况下是否公开?小博士在这里;)
  • 取决于您所说的冗余。它在技术上是多余的,因为编译器并不关心它是否存在。但这本身不应该定义你是否写了超过最低限度的东西。编译器也不关心你是否使用泛型。如果您仅依赖原始类型,它将编译和运行。但是当然我们无论如何都会添加它们,因为它们很有用并且有助于减少错误。我们应该对这些事情务实,而不是教条。
  • @JaiminModi 这是一个意见。 JetBrains(制造 IntelliJ)决定我们不应该这样做。对于那些不知道默认行为不同的人(比如你自己)或提醒忘记的人来说,这可能是一个有用的指标。我会采取中立的立场,说可以包含它,但我自己不会这样做。
猜你喜欢
  • 1970-01-01
  • 2012-08-26
  • 2012-12-25
  • 2013-05-12
  • 2013-03-02
  • 2017-06-07
  • 2011-11-25
  • 2019-04-14
  • 2015-08-02
相关资源
最近更新 更多