假设我有一个通用类:
class OrderedArray<T>(
private val items: Array<T>,
private val comparator: Comparator<in T>
) {
constructor(items: Array<T>) : this(items, naturalOrder<T>())
}
当然这段代码没有编译,因为T
不一定具有可比性。是否有可用的语言结构在构造函数上绑定类型的泛型参数?当自然排序可用时,我怎么能允许构造我的类的实例而不显式传递比较器?
答案 0 :(得分:4)
没有办法在构造函数上引入泛型绑定,因为构造函数没有自己的泛型参数,它们只能使用类参数。
请考虑以下解决方法:
一种解决方案是创建具有泛型边界的子类并使用它:
class NaturallyOrderedArray<T: Comparable<T>>(items: Array<T>)
: OrderedArray<T>(items, naturalOrder<T>())
但它看起来很笨(编写一个类只是为了覆盖泛型绑定并引入另一个构造函数?!)并要求父类为open
或至少{{1} }。
您可以使用所需的通用边界创建工厂函数:
sealed
您可以使该函数模仿构造函数,使其像fun <T: Comparable<T>> naturallyOrderedArray(items: Array<T>) =
OrderedArray(items, naturalOrder<T>())
一样调用,但it's better to keep to consistent naming也会暗示使用自然顺序。
答案 1 :(得分:1)
我会写得很直接:
RewriteCond %{HTTP_HOST} !^www.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
它能解决问题吗?如果没有,你的案件有哪些限制?