【发布时间】:2019-01-16 16:02:29
【问题描述】:
我最初想创建一个可以在构造函数中中止实例化的类,但根据this link 我应该改用工厂类。但是现在我想阻止除了工厂类之外的任何人创建“内部”类的对象,同时让每个人都可以访问内部类的方法。
我已经尝试过this answer。
import java.util.Date
object InnerFactory {
class Inner private constructor(startDate: Date? = null, endDate: Date? = null) {
fun getTimeDifference(): Long? {
//calculates time difference but doesn't matter to this example
}
}
fun createInnerObject(startDate: Date? = null, endDate: Date? = null): Inner? {
if (startDate != null && endDate != null && !endDate.after(startDate)) {
return null
}
return Inner(startDate, endDate)
}
}
我会像下面这样使用它:
val date1 = Date(1547600000)
val date2 = Date(1547600600)
val inner = InnerFactory.createInnerObject(date1, date2) //should return an instance
val invalidInner = InnerFactory.createInnerObject(date2, date1) //should not return an instance because the "endDate" is before "startDate"
val difference = inner?.getTimeDifference()
当我将鼠标悬停在“createInnerObject”函数中对构造函数的使用上时,它说“无法访问'
【问题讨论】:
-
请注意:Kotlin 区分“内部”和“嵌套”类。您的
Inner类实际上是一个嵌套类。一个实际的内部类是用inner关键字定义的。不同之处在于内部类携带对外部类对象的引用。你可以在这里阅读更多信息:kotlinlang.org/docs/reference/nested-classes.html
标签: kotlin