Kotlin 数据类

     2023-02-27     157

关键词:

【中文标题】Kotlin 数据类【英文标题】:Kotlin Data class 【发布时间】:2019-08-16 20:43:49 【问题描述】:

我在 java 中有以下 POJO,它在 Spring Boot 应用程序中用于在应用程序启动期间从 YML 注入属性。尝试将应用程序转换为Kotlin,但是当我将 POJO 转换为数据类时,我很难实现注入的值。

@Component
@ConfigurationProperties("rest")
@Data
public class RestProperties 
    private final Client client = new Client();

    @Data
    public static class Client 
        private int defaultMaxTotalConnections;
        private int defaultMaxConnectionsPerRoute;
        private int defaultReadTimeout;
    

我尝试了以下解决方案,但没有奏效。

@Component
@ConfigurationProperties("rest")
class RestProperties 
    val client = Client()

    class Client() 
        constructor(
            defaultMaxTotalConnections: Int, 
            defaultMaxConnectionsPerRoute: Int, 
            defaultReadTimeout: Int
        ) : this()
    


@Component
@ConfigurationProperties("rest")
class RestProperties 
    val client = Client()

    class Client 
        var defaultMaxTotalConnections: Int = 50
            set(defaultMaxTotalConnections) 
                field = this.defaultMaxTotalConnections
            

        var defaultMaxConnectionsPerRoute: Int = 10
            set(defaultMaxConnectionsPerRoute) 
                field = this.defaultMaxConnectionsPerRoute
            

        var defaultReadTimeout: Int = 15000
            set(defaultReadTimeout) 
                field = this.defaultReadTimeout
            
    

第二个代码有效,但值不是从 YML 注入的。感谢您的帮助。

【问题讨论】:

Kotlin & Spring Boot @ConfigurationProperties的可能重复 谢谢@noiaverbale 【参考方案1】:

RestProperties 类可以转换为 Kotlin,如下所示:

@Component
@ConfigurationProperties("rest")
class RestProperties 
    val client: Client = Client()

    class Client 
        var defaultMaxTotalConnections: Int = 0
        var defaultMaxConnectionsPerRoute: Int = 0
        var defaultReadTimeout: Int = 0
    

请注意,需要在application.yml 中添加如下属性才能正确注入。

rest:
  client:
    defaultMaxTotalConnections: 1
    defaultMaxConnectionsPerRoute: 2
    defaultReadTimeout: 3

另外,像这样提供配置的类通常应该用@Configuration而不是@Component注解。

【讨论】:

谢谢@Madhu Bhat

kotlin常用的kotlin类①(嵌套类|数据类|数据类copy函数|数据类解构声明operatorfuncomponent1|数据类运算符重载)(代码片段)

...类二、数据类三、数据类copy函数四、数据类解构声明1、Kotlin普通类解构声明operatorfuncomponent12、数据类解构声明五、运算符重载函数一、嵌套类嵌套类指的是在类A中定义类B,一般是类B对类A有一定的作用,将类B嵌套进类A中;格式如... 查看详情

kotlin常用的kotlin类①(嵌套类|数据类|数据类copy函数|数据类解构声明operatorfuncomponent1|数据类运算符重载)(代码片段)

...类二、数据类三、数据类copy函数四、数据类解构声明1、Kotlin普通类解构声明operatorfuncomponent12、数据类解构声明五、运算符重载函数一、嵌套类嵌套类指的是在类A中定义类B,一般是类B对类A有一定的作用,将类B嵌套进类A中;格式如... 查看详情

kotlin基础-数据类

...不是指保存到磁盘,而是指转换成文本格式,便于保存*Kotlin数据类:dataclass类名(属性列表)***/dataclassArticle(varid:Int,vartitle:String,varcontent:String)funmain(args:Array<String>){valart 查看详情

Firebase @Exclude 与 kotlin 数据类

】Firebase@Exclude与kotlin数据类【英文标题】:Firebase@Excludewithkotlindataclass【发布时间】:2017-02-2804:47:32【问题描述】:我在Kotlin中有这个数据类(示例):importcom.google.firebase.database.ExcludedataclassUser(valname:String="",@Excludevalage:Int=0)而... 查看详情

在 Kotlin 中扩展数据类

】在Kotlin中扩展数据类【英文标题】:ExtenddataclassinKotlin【发布时间】:2014-12-1403:59:07【问题描述】:数据类似乎是Java中老式POJO的替代品。这些类允许继承是可以预料的,但我看不出扩展数据类的方便方法。我需要的是这样的... 查看详情

对 kotlin 数据类使用 Jackson @JsonProperty 注释

】对kotlin数据类使用Jackson@JsonProperty注释【英文标题】:UsageofJackson@JsonPropertyannotationforkotlindataclasses【发布时间】:2018-06-0712:09:23【问题描述】:科特林1.2.10jackson-module-kotlin:2.9.0我在kotlin中有以下数据类:dataclassCurrencyInfo(@JsonProp... 查看详情

Proguard - 不要混淆 Kotlin 数据类

】Proguard-不要混淆Kotlin数据类【英文标题】:Proguard-donotobfuscateKotlindataclasses【发布时间】:2018-02-1607:54:46【问题描述】:在我的项目中,我将AutoValue用于我的旧模型类。我开始使用Kotlin,我想使用DataClasses而不是AutoValue。我想在... 查看详情

将 Firebase 数据快照反序列化为 Kotlin 数据类

】将Firebase数据快照反序列化为Kotlin数据类【英文标题】:DeserializeaFirebaseData-SnapshottoaKotlindataclass【发布时间】:2018-11-1607:06:08【问题描述】:您好,我有一个Kotlin数据类,如下所示dataclassUser(@get:ExcludevalgUser:Boolean,@get:Excludevaluid... 查看详情

Kotlin - 数据类实体抛出 ***Error

】Kotlin-数据类实体抛出***Error【英文标题】:Kotlin-Dataclassentitythrows***Error【发布时间】:2018-08-0206:16:38【问题描述】:我尝试将kotlin(版本1.2.21)与spring-boot(1.5.9.RELEASE)结合起来。我在使用带有@Entity注释的数据类时遇到了问... 查看详情

使用 GSON 来自 Json 的 Kotlin 数据类

】使用GSON来自Json的Kotlin数据类【英文标题】:KotlinDataClassfromJsonusingGSON【发布时间】:2017-10-2209:54:15【问题描述】:我有这样的JavaPOJO类:classTopic@SerializedName("id")longid;@SerializedName("name")Stringname;我有一个像这样的Kotlin数据类datacl... 查看详情

kotlin学习与实践数据类类委托“object”

...向外提供getter、setter、toString、Hashcode等机械式的方法。*Kotlin也像Java一样提供了toStringequalshashCode方法,也可以重写他们classClient1(valname:String,valpostalCode:Int){overridefuntoStri 查看详情

kotlin 数据类 + bean 验证 jsr 303

】kotlin数据类+bean验证jsr303【英文标题】:kotlindataclass+beanvalidationjsr303【发布时间】:2016-06-2105:46:39【问题描述】:我正在尝试让Kotlin在spring-data-rest项目中使用jsr303验证。给定以下数据类声明:@EntitydataclassUser(@Id@GeneratedValue(strat... 查看详情

从 Kotlin 中的密封类扩展数据类

】从Kotlin中的密封类扩展数据类【英文标题】:ExtendingdataclassfromasealedclassinKotlin【发布时间】:2017-11-0905:46:33【问题描述】:我有一组共享一些公共字段的数据类,所以理想情况下,我想在超类型中声明它们(本例中为Message)... 查看详情

kotlin数据类与密封类(代码片段)

数据类Kotlin可以创建一个只包含数据的类,关键字为 data:dataclassUser(valname:String,valage:Int)编译器会自动的从主构造函数中根据所有声明的属性提取以下函数:equals() / hashCode()toString() 格式如 "User(name=John,age=42)"co... 查看详情

覆盖 Kotlin 数据类的 getter

】覆盖Kotlin数据类的getter【英文标题】:OverridegetterforKotlindataclass【发布时间】:2016-11-2407:55:33【问题描述】:给定以下Kotlin类:dataclassTest(valvalue:Int)如何覆盖Intgetter以便在值为负时返回0?如果这不可能,有哪些技术可以达到合... 查看详情

Json 到 kotlin 数据类 [关闭]

】Json到kotlin数据类[关闭]【英文标题】:Jsontokotlindataclasses[closed]【发布时间】:2017-03-1610:38:41【问题描述】:是否存在从json模型生成kotlin数据类的服务,其工作方式与http://www.jsonschema2pojo.org/站点上的工作方式相同?我的新项目... 查看详情

Kotlin 数据类可选变量

】Kotlin数据类可选变量【英文标题】:Kotlindataclassoptionalvariable【发布时间】:2018-04-1810:48:32【问题描述】:dataclassStudent(valid:Int?,valfirstName:String?,vallastName:String?,valhobbyId:Int?,valaddress1:String?,valaddress2:String?,valcreated: 查看详情

暴露属性和 Kotlin 数据类的接口

】暴露属性和Kotlin数据类的接口【英文标题】:InterfacesexposingpropertiesandKotlindataclasses【发布时间】:2019-12-1411:48:28【问题描述】:我在Kotlin中有一个数据类:dataclassImage(valname:String,valurl:URL)我想通过REST(SpringBoot,JPA)提供这些... 查看详情