我不能用Kotlin实现这个Java接口.

import org.springframework.core.convert.converter.Converter
import org.springframework.stereotype.Component

@Component
class FeatureFlagConverter : Converter<String?, FeatureFlags> {
    override fun convert(source: String?): FeatureFlags = FeatureFlags(source ?: "")
}

编译器失败,出现以下错误:

类‘FeatureFlagConverter’不是抽象的,并且没有实现抽象成员公共抽象Fun Convert(来源:字符串):FeatureFlages?在org.springframework.core.convert.converter.Converter中定义

Why?接口是纯Java接口(https://github.com/spring-projects/spring-framework/blob/main/spring-core/src/main/java/org/springframework/core/convert/converter/Converter.java),因此convert方法中的source参数可能为空,并且没有任何指示它不为空.

一百零二

推荐答案

您链接的方法的文档中写道:

source要转换的源对象,它必须是S的实例(不是null)

因此,S必须是不可为空的.


Kotlin似乎"知道"参数必须不可为空的原因很可能来自可为空性注释.Kotlin支持several nullability annotations for Java.Spring的可空性注释是meta-annotated using JSR-305,因此它们是受支持的.

尽管此方法没有将source标记为@NonNull,但我认为整个包都被标记为非空性,作为默认的here.

Java相关问答推荐

将@ManyToOne JPA Composite Key用作Id保存实体添加额外参数

通过推送通知向自己发送Matrix消息

Collections.binarySearch()使用Collections.reverseOrder()作为比较器返回-1

Spring安全实现多个SQL表身份验证

为什么Java中的两个日期有差异?

Java中不同包中的类之间的配置共享

Java WireMock定义存根在Cucumber并行执行的多线程测试中失败

JDK22执行repackage of goal org. springframework. boot:spring—boot—maven—plugin:3.2.3:repackage failed:unsupported class file major version 66—>

neo4j java驱动程序是否会在错误发生时自动回滚事务?

存根基类的受保护方法

是否在允许数组元素为空时阻止 idea 为空性警告?

如何在运行时动态创建表(使用Java、JPA、SprringBoot)

在AVL树的Remove方法中使用NoSuchElementException时遇到问题

如何在Java中从XML中获取特定的 node ,然后将其删除?

如何在Spring Boot中创建可以将值传递给配置的&Enable&Quot;注释?

当构造函数创建一个新实例时,Java为什么需要&new";

JFree Chart从图表中删除边框

何时调用密封层次 struct 的switch 中的默认情况

当我try 返回可选时,Mock无法正常工作

类型安全:从 JSONArray 到 ArrayList> 的未经判断的转换