Изначально я хотел создать класс, который может прервать создание экземпляров в конструкторе, но согласно этой ссылке вместо этого я должен использовать класс Factory. Но теперь я хочу запретить кому-либо, кроме класса фабрики, создавать объект класса "Inner", предоставляя каждому доступ к методам внутреннего класса.
Я уже попробовал этот ответ .
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()
Он говорит «не может получить доступ» : он закрыт для «Inner» при наведении указателя мыши на использование конструктора в функции «createInnerObject».