Kotlin java.lang.NoSuchMethodException:<;初始化>;()
我正在使用kotlin在数据库中存储库中的类。问题是这个类没有一个没有参数的构造函数(它是一个Java类)。当我从数据库检索对象时,我得到以下错误,因为它没有构造函数:Kotlin java.lang.NoSuchMethodException:<;初始化>;(),java,kotlin,instantiation,Java,Kotlin,Instantiation,我正在使用kotlin在数据库中存储库中的类。问题是这个类没有一个没有参数的构造函数(它是一个Java类)。当我从数据库检索对象时,我得到以下错误,因为它没有构造函数: java.lang.NoSuchMethodException: org.springframework.security.oauth2.core.OAuth2AccessToken.<init>() 这是存储库类: @Repository interface AuthorizedClientDatabaseRep
java.lang.NoSuchMethodException: org.springframework.security.oauth2.core.OAuth2AccessToken.<init>()
这是存储库类:
@Repository
interface AuthorizedClientDatabaseRepository : MongoRepository<AuthorizedClientDatabase, ObjectId> {
}
类没有尝试调用的非参数构造函数。您需要更改代码以使用两个现有构造函数之一:
public OAuth2AccessToken(TokenType tokenType, String tokenValue,
Instant issuedAt, Instant expiresAt) {
// ...
}
或
公共OAuth2AccessToken(TokenType TokenType,String tokenValue,
即时发布日期、即时过期日期、设置范围){
// ...
}
除了卡罗尔·道贝基的答案;如果您不以任何方式指定构造函数,那么所有类都会为您提供一个空构造函数(没有参数)和其中没有主体 您的问题可能是以下问题之一:
数据
类应该对此没有影响。数据类只负责用一个支持字段包装属性,并为您提供getter和setter,感谢Alexey的纠正。Kotlin对所有属性都这样做。除此之外,他们还编写了toString
、equals
和hashCode
方法的实现,并添加了一个很好的方法来生成同一对象的副本,名为copy
我最后更改了OAuth2AccessToken类并创建了一个自定义类:
data class DatabaseOauth2AccessToken(
val tokenValue: String,
val issuedAt: Instant?,
val expiredAt: Instant?,
val scopes: MutableSet<String>
)
数据类数据库OAuth2AccessToken(
val-tokenValue:String,
val发出日期:即时?,
val expiredAt:即时?,
val作用域:可变表集
)
好的,这是我找到的最可行的解决方案。您使用的是
数据类吗?是的,我使用的是数据类所有类都至少有一个构造函数。显示您的代码以说明问题。我已经用类更新了问题数据库中的文档是什么样子的?“数据类应该对此没有影响。”Kotlin中的数据类要求至少有一个主构造函数参数,因此,总是有一个带参数的构造函数,而不添加默认构造函数。“数据类只是负责用一个支持字段包装属性,并为您提供getter和setter。”这完全是错误的;属性本身负责为您提供getter和setter,并在默认情况下使用支持字段,数据类
。抱歉,Alexey,您是对的。我想说的是,它们还提供了与数据类的属性相关的复制方法,而我完全没有
public OAuth2AccessToken(TokenType tokenType, String tokenValue,
Instant issuedAt, Instant expiresAt) {
// ...
}
public OAuth2AccessToken(TokenType tokenType, String tokenValue,
Instant issuedAt, Instant expiresAt, Set<String> scopes) {
// ...
}
data class DatabaseOauth2AccessToken(
val tokenValue: String,
val issuedAt: Instant?,
val expiredAt: Instant?,
val scopes: MutableSet<String>
)