在Kotlin中,是否可以使用工厂函数创建具有私有构造函数的类的实例?
我的目标是强制使用工厂函数并通过类的构造函数阻止实例化。
示例:
// factory function, valid
val myInstance = myClassOf()
// class instantiation, invalid
val myInstance = MyClass()
我试图模仿某些内置工厂函数的行为,例如intArrayOf()
,例如。
// works
val myIntArray = intArrayOf()
// not possible as IntArray has a private constructor
val myIntArray = IntArray()
答案 0 :(得分:6)
您可以这样使用companion object:
each
如果工厂函数具有特殊含义,则将其命名。例如:
class MyClass private constructor() {
companion object {
operator fun invoke() = MyClass()
}
}
val myInstance = MyClass() // Calls the factory function invoke()
答案 1 :(得分:5)
您可以这样做:
import MyClass.Companion.myClassOf
class MyClass private constructor() {
companion object {
fun myClassOf() = MyClass()
}
}
//val myInstance1 = MyClass() // not allowed
val myInstance2 = myClassOf()
答案 2 :(得分:1)
尝试使用Builder。
ref= FirebaseDatabase.getInstance().getReference()
.child("Users");
ref.equalTo("Youtubers").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
for(DataSnapshot child:dataSnapshot.getChildren()){
if(child.getKey().equals("Youtubers")){
youtuber_id=child.getValue().toString();
dataSnapshot.getChildren().iterator().next().getValue().toString();
}
} } }