我想创建具有以下属性的Matrix2D类:
我该怎么做?这是我的草图:
class Matrix2D<T> : Cloneable, Iterable<T> {
private val array: Array<Array<T>>
// Call default T() constructor if it exists
// Have ability to pass another default value of type
constructor(rows: Int, columns: Int, default: T = T()) {
when {
rows < 1 -> throw MatrixDimensionException("Number of rows should >= 1")
columns < 1 -> throw MatrixDimensionException("Number of columns should be >= 1")
}
array = Array(rows, { Array(columns, { default }) })
}
}
Run Code Online (Sandbox Code Playgroud)
无法在编译时检查类是否具有默认构造函数。我可以通过传递创建给定类型实例的工厂来解决此问题:
class Matrix2D<T : Any> : Cloneable, Iterable<T> {
private val array: Array<Array<Any>>
constructor(rows: Int, columns: Int, default: T) :
this(rows, columns, { default })
constructor(rows: Int, columns: Int, factory: () -> T) {
when {
rows < 1 -> throw MatrixDimensionException("Number of rows should >= 1")
columns < 1 -> throw MatrixDimensionException("Number of columns should be >= 1")
}
array = Array(rows) { Array<Any>(columns) { factory() } }
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,T在这种情况下不能使用类型数组,因为有关其实际类型的信息会在运行时删除。只需在必要时使用数组Any并将其转换为实例T。
| 归档时间: |
|
| 查看次数: |
3889 次 |
| 最近记录: |