You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在Kotlin数据类中使用匿名类实现结构化数据?

关于内嵌匿名对象作为数据类属性类型的语法支持

目前主流的JVM语言(比如你示例里类似的Kotlin)并不支持这种直接在数据类属性声明中内嵌匿名对象类型的写法。原因很简单:匿名对象属于无命名的临时类型,无法作为属性的显式类型被声明——属性需要一个明确可复用的类型标识,编译器才能正确处理类型检查、序列化等逻辑。

替代方案

1. 定义嵌套数据类(推荐)

这是最常用的规范写法,把地址拆成独立的嵌套数据类,既保证类型安全,又清晰可读:

data class Customer(
    val name: String,
    val address: Address
)

data class Address(
    val street: String,
    val city: String
)

2. 使用匿名对象赋值(不推荐)

如果只是临时场景,你可以给属性赋值匿名对象,但属性类型只能用Any或者通用父类型,这会丢失类型安全,访问属性时需要强制类型转换:

data class Customer(
    val name: String,
    val address: Any = object {
        val street = "Central Ave"
        val city = "Chicago"
    }
)

// 访问时需要强转
val customer = Customer("Alice", object { val street = "Main St"; val city = "NY" })
val street = (customer.address as? dynamic)?.street // Kotlin中需要借助dynamic或者反射

3. 其他语言的类似写法

如果是TypeScript这类语言,支持直接在类型声明中内嵌字面量类型,写法和你示例很像,但本质是定义结构化的接口类型,而非匿名对象:

type Customer = {
    name: string;
    address: {
        street: string;
        city: string;
    }
}

内容的提问来源于stack exchange,提问作者Rollie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 00:15:56