【问题标题】:what is the correct syntax for defining a static (non-inherited) method on an interface in jdk 8?在 jdk 8 的接口上定义静态(非继承)方法的正确语法是什么?
【发布时间】:2013-02-01 12:11:49
【问题描述】:

虚拟扩展方法/又名默认可覆盖方法的语法(在 jdk 8 中)有据可查:

 public interface Foo {
      default void bar(String out) {
          System.out.println(out);
      };
    }

但我找不到关于接口上的静态非继承方法的正确语法的任何参考?

【问题讨论】:

  • 我还没有听说过这样的新功能。听起来不太对劲。接口具有非继承方法有什么意义?
  • @RyanStewart 你不能覆盖它,但你可以运行它。
  • 这听起来像是一个奇怪的功能,我很好奇。你能指出任何关于它的信息吗?
  • @RyanStewart 大声笑,我找不到 nuthin。花了相当多的时间谷歌搜索,但找不到任何文档。我的原始来源是一条即兴推文。但是我已经使用答案中的语法对其进行了编译,并且通过 sue 我正在使用 jdk lambda。如果你找到更多信息,我也会很感兴趣。

标签: java static java-8


【解决方案1】:

语法与方法在类中相同:

public static void bar() {
    System.out.println("hello");
}

【讨论】:

  • 我得到一个编译错误...我需要一个超级特殊的 jdk 8 吗?
  • 我正在使用从jdk8.java.net/lambda 下载的 b74 二进制文件,它编译得很好。他们现在在 b75。
  • 好的,谢谢,我使用的是非 lambda 版本。尽管此功能的文档仍然很少 - 我找不到任何文档。
  • 你如何执行这些......我尝试了多种方法但没有运气,或者它们还没有正确实施
  • 就像任何其他静态方法一样:Foo.bar()。你使用的是支持 lambda 的 JDK,可以从我上面给出的 4 cmets 的链接下载?
猜你喜欢
  • 2023-04-09
  • 2010-10-17
  • 2023-04-02
  • 1970-01-01
  • 2018-01-28
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多