问题描述
在C#中,我可以:
var a = new { prop42 = "42" };
Console.WriteLine("a.prop42 = " + a.prop42);
或执行其他一些操作,例如序列化匿名类实例(用于在浏览器的js中使用)。不使用接口或抽象类,完全匿名的类实例。
可以在Kotlin中做同样的事情吗?
解决方法
是的,您可以在Kotlin中进行等效操作:
val a = object { val prop42 = "42" }
println("a.prop42 = ${a.prop42}")
其描述为in the language reference。另请参见this question。
但是,这通常不是一个好主意。因为类型没有名称,所以您不能在公共声明中使用它,例如该类型的类或顶级属性。也无法创建列表或地图。 (通常,由于您没有指定一个超类,因此只能引用其命名的超类-Any
。)因此它的使用受到了一些限制。 (缺少名称也使代码难以遵循。)