【问题标题】:Illegal modifier for the interface method接口方法的非法修饰符
【发布时间】:2015-11-24 14:01:16
【问题描述】:

我有这个代码:

public interface Type {
    public static Type match(String string) {
        try {
            return TypeBuiltIn.valueOf(string.toUpperCase());
        } catch (Exception e) {
            return null;
        }
    }
}

我和教程中的某个人做同样的事情,对他来说效果很好,但我在match(String string) 上收到错误:

接口方法匹配的非法修饰符;只允许公开和摘要

我试图去除静电,但没有任何效果。它说我应该删除方法体,但是我该怎么办?

【问题讨论】:

  • 您使用的是什么 Java 版本?
  • 我对 Java 不太了解,但也许您应该将类​​型更改为 public 以外的其他类型,因为您使用的是 return?
  • 确保使用 Java 8 进行编译。
  • interface 标记为static 的方法并不总是被允许的。使用 Java 8 编译。
  • 另外,你不应该只捕获异常,这绝不是一个好习惯。我认为您需要在您的情况下捕获 EnumConstantNotFound。

标签: java eclipse methods interface


【解决方案1】:

如果您使用 Java 8 以下的 Java 版本,此代码将无法工作,因为interface 不支持 Java 8 以下版本的java 的静态方法.您需要从this link 更新您的Java 版本,并从您的系统设置中编辑您的环境变量path

如果您不打算更新您的java 版本,那么您的Interface 将不支持任何静态方法。对于class,您必须使用implement interfacename 并在类中的静态方法中拥有特定的主体。

为此,您的界面应如下所示:

public interface Type {
    public abstract Type match(String string);
}

class应该如下:

public class YourDesiredClassname implements Type {

    public static Type match(String string) {
        try {
            return TypeBuiltIn.valueOf(string.toUpperCase());
        } 
        catch (Exception e) {
            return null;
        }
    }   
}

【讨论】:

  • 我已经有Java 1.8.0_60,所有系统变量都可以,但是还是不行……还是同样的错误。
【解决方案2】:

请查看命令java -version的输出。它打印的第一行应该类似于

java version "1.8.xxxx"

java 8 之前不允许静态方法默认实现。

【讨论】:

  • 我已经安装了 java 1.8.0_60,但是当我进入 Window -> Preperences -> Java -> Compiler 时,Compiler 的合规级别是从 1.3 到 1.7,我不能选择 1.8! :O
  • @2xxx2 这不是您编辑 Java 编译器的方式。照我说的做。转到 控制面板 -> 系统 -> 高级系统设置 -> 环境变量... -> 为用户创建新变量。 Variable name = "Path"(不带引号)Variable value = "path of your bin folder where java jdk 1.8.0_60 is installed"(再次,不带引号)
  • 我知道,它被设置为 1.8.0_60 的 bin 文件夹,但它不起作用。不过现在好了,我修好了。不管怎么说,还是要谢谢你。 :P
【解决方案3】:

哇...你们太棒了!非常感谢大家的帮助,我认为我会在大约一周内得到一个答案,但我在几个小时内得到了 7 个。我使用的是 Kepler,所以它不起作用,但后来我安装了 Java 8 Support 并且它起作用了。

如果有人遇到同样的问题,这里是 Java 8 支持页面: https://wiki.eclipse.org/JDT/Eclipse_Java_8_Support_For_Kepler

感谢大家的帮助。 :)

【讨论】:

  • greg-449 说只有 Luna 和 Mars 支持 Java 8,所以我在谷歌上搜索了 Kepler 的修复程序,这就是我找到它的地方...谢谢,Greg! :P
猜你喜欢
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-02
  • 2022-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多