我正在尝试为一个国家创建一个简单的数据类。
data class Country(val name: String, val capital: String)
这个很好用。现在我想添加邻居。
data class Country(val name: String, val capital: String, val neighbors: List<Country>)
这引起了问题。加拿大和美国是邻居。我如何干净地示例化这些国家对象中的每一个?我不想让neighbors元素是可变的。有可能做到这一点吗?(我首先尝试创建没有邻居的国家,然后使用复制构造函数创建有邻居的国家。但是equals方法有问题。)这看起来是一个简单的问题,但我不知道如何解决。
3条答案
按热度按时间xa9qqrwz1#
我认为你应该用邻居的id来表示邻居,然后创建一个函数来执行查询。这是我的解决方案
6ovsh4lw2#
不知道你的案子到底是什么。
但首先,我认为这种数据表示是有问题的。例如,想象一下toString方法。美国将调用邻居的toString,它将调用加拿大的toString,然后返回美国,这永远不会结束...
另一种方法是将邻居的逻辑保存在单独的类中。它可以被封装,并且不可能配置不正确的状态,其中美国是加拿大的邻居,但反之亦然。
它可以看起来像这样:
和用法示例
uemypmqf3#
Edouardsepopo Zinnoussou的回答要求调用者传递
allCountries
集合。如果你不喜欢这样,那么这里有一个解决方案可以避免这种情况:...使用
lazy
来处理数据的后期绑定。请注意,Country对象现在不会在toString/equality/etc中暴露邻居,但这里的策略是使用Factory来创建国家: