当前位置: 首页 > 知识库问答 >
问题:

这个接口代码在Java的编译情况如何?

易俊驰
2023-03-14

我写了如下界面:

public interface Configuration
{
    String getClientId();
    void setClientId(String clientId);
}

和以下类

public class MyConfiguration implements Configuration
{
    @Getter
    private UUID clientId;

    @Override
    public void setClientId(String clientId)
    {
        this.clientId = UUID.fromString(clientId);
    }
}

您可以看到,myconfiguration中的myClientId是一个UUID,而接口是一个字符串类型。我本以为是编译器错误,但这是如何工作的呢?

共有1个答案

危璞
2023-03-14

但它..不编译:

> cat Test.java
interface Configuration {
    String getX();
}

class MyConfiguration implements Configuration {
    @lombok.Getter java.util.UUID x;
}

> javac -cp lombok.jar Test.java
Test.java:5: error: MyConfiguration is not abstract and does not override abstract method getX() in Configuration
class MyConfiguration implements Configuration {
^
Test.java:6: error: getX() in MyConfiguration cannot implement getX() in Configuration
    @lombok.Getter java.util.UUID x;
    ^
  return type UUID is not compatible with String
2 errors

如果在您的系统上是这样的,那么您所编译的并不是您认为正在编译的内容;您当然不是在编译这两行。

  • 检查MyConfiguration.class中的Configuration是否引用了您认为的配置(可能有第二个配置接口?)
  • 清理项目
  • 检查您是否在代码文件中编写了公共字符串getClientId():如果编写了,lombok将会看到它,然后不会生成getter(因为它已经存在)。但是,如果字段上的@getter最终为noop,lombok将发出警告,因此确保不发生这种情况的一种方法是检查警告。

如果你想知道龙目岛在引擎盖下做什么,总是有:

> java -jar lombok.jar delombok -p Test.java

[elided: The same compiler errors show up here too]
// Generated by delombok at Sat Apr 17 16:25:58 CEST 2021

interface Configuration {
    String getX();
}

class MyConfiguration implements Configuration {
    java.util.UUID x;

    @java.lang.SuppressWarnings("all")
    public java.util.UUID getX() {
        return this.x;
    }
}
 类似资料:
  • 问题- 蒙克喜欢在数组上预制不同的操作,因此作为哈克地球学校的校长,他给他的新学生米什基布置了一个任务。Mishki将被提供一个大小为N的整数数组A和一个整数K,在这里她需要将数组向正确的方向旋转K步,然后打印结果数组。由于她是新来的,请帮助她完成任务。 输入: 第一行将由一个表示测试用例数的整数T组成。对于每个测试用例: 第一行由两个整数N和K组成,N是数组中的元素数,K表示旋转的步数。 下一行

  • 我想将我的.java(几个)编译成一个,该至少兼容和更新版本,最好是和更新版本的Java。(我有)

  • 我们目前在Java8中编译了代码,但我们在Java11 VM上运行它。现在我们也在尝试将代码移动到Java11编译时。想知道在Java8中编译代码与在Java11中编译代码在性能方面是否有任何好处,因为两个编译器都会生成不同的类文件(字节码)?在效率方面,一个与另一个有何不同?

  • 问题内容: 我想在Eclipse中编译我的Java程序,但不想运行它。我不知道该怎么做。 如何在不运行Eclipse的情况下将Java程序编译为文件? 问题答案: 您可以在项目菜单中自动取消选中构建,然后通过按Ctrl + B或单击打印机图标右侧出现的图标手动构建。

  • 我有这个枚举: 并且想实现CustomStringConvertible,所以我做到了。(不要在这上面戳洞,这个问题已经简化了:): 在Playground中运行它完全符合要求。但是,它会在最终的中出错。(同样的运行时失败发生在我的应用程序中,所以这与在游乐场中无关。) 经过大量的头疼和代码设置,我发现这是因为没有实现CustomStringConverable,所以开关中没有匹配的情况。我假设这

  • 在方法或类范围内,下面的行编译(带有警告): 在类作用域中,变量获取其默认值,以下给出未定义引用错误: 这难道不是第一个应该以相同的未定义引用错误结束吗?或者第二行应该编译?或者我错过了什么?