Generics 单个构造函数上的泛型边界

Generics 单个构造函数上的泛型边界,generics,constructor,kotlin,Generics,Constructor,Kotlin,假设我有一个泛型类: class OrderedArray<T>( private val items: Array<T>, private val comparator: Comparator<in T> ) { constructor(items: Array<T>) : this(items, naturalOrder<T>()) } class OrderedArray( 私有val项:数组, 专用va

假设我有一个泛型类:

class OrderedArray<T>(
    private val items: Array<T>,
    private val comparator: Comparator<in T>
) {
    constructor(items: Array<T>) : this(items, naturalOrder<T>())
}
class OrderedArray(
私有val项:数组,
专用val比较器:比较器
) {
构造函数(items:Array):这个(items,naturalOrder())
}

当然,这段代码并不编译,因为
T
不一定具有可比性。是否有可用的语言构造将类型的泛型参数限制在构造函数上?当自然排序可用时,如何允许在不显式传递比较器的情况下构造类的实例?

无法在构造函数上引入泛型绑定,因为构造函数没有自己的泛型参数,只能使用类参数

考虑以下解决方法:

  • 一种解决方案是使用泛型绑定生成一个子类并使用它:

    class NaturallyOrderedArray<T: Comparable<T>>(items: Array<T>) 
        : OrderedArray<T>(items, naturalOrder<T>())
    
    您可能会使函数模拟构造函数,以便像调用
    orderedaray(items)
    一样调用它,但这也会提示使用了自然顺序


我会主动写信给strait:

class OrderedArray<T: Comparable<T>>(
    private val items: Array<T>,
    private val comparator: Comparator<in T> = naturalOrder<T>())
class OrderedArray(
私有val项:数组,
private val comparator:comparator=naturalOrder()

它能解决问题吗?如果没有,您的案例有哪些限制?

问题是,我希望我的班级也能使用不可比的T-s。当然,在这些情况下必须提供明确的比较标准。
class OrderedArray<T: Comparable<T>>(
    private val items: Array<T>,
    private val comparator: Comparator<in T> = naturalOrder<T>())