0

有什么方法可以将方法添加到多个类,或者减少实现相同方法所需的重复代码量。

目前我使用以下内容(在此示例中添加 ac 方法,该方法计算迭代中项目的重复次数):

/** Counts each of the distinct items. */
fun <T> Iterable<T>.c() = groupingBy { it }.eachCount()
/** Counts each of the distinct items. */
fun <T> Sequence<T>.c() = groupingBy { it }.eachCount()
/** Counts each of the distinct items. */
fun <T> Array<T>.c() = groupingBy { it }.eachCount()

我想知道是否有一种方法可以减少代码量,目前我对我希望在这 3 种类型中的任何一种上使用的所有方法重复这一点。

我能找到的唯一方法是使用通用方法定义一个接口,然后使用一个类来包装每个类型并实现该通用接口,但这似乎有很多代码可能是一种更简单的方法.

4

1 回答 1

2

你目前拥有的就是你能做的最好的。如果您查看一些标准库集合函数的实现,您会看到它们分别为IterableSequenceArray和原始数组包装器一一实现。

例如,groupingBy您调用的函数是 3 个不同的函数,可以在此处此处此处找到它们。所以即使你能以某种方式同时扩展所有这些类,你也不能groupingBy对它们调用相同的方法,你需要分别处理它们。

总之,不幸的是,答案是否定的,就您在一天结束时必须在应用程序中拥有的代码而言,它并没有比您拥有的更好。如果您有很多这样的情况,请考虑研究所有不同情况的代码生成(这也是标准库代码的维护方式)。

于 2018-03-20T17:48:34.333 回答