私有构造在科特林

私有构造在科特林

问题描述:

在Java中有可能通过使private,然后通过publicstatic方法访问它,这个类里面隐藏类的主要构造:私有构造在科特林

public final class Foo { 
    /* Public static method */ 
    public static final Foo constructorA() { 
     // do stuff 

     return new Foo(someData); 
    } 

    private final Data someData; 

    /* Main constructor */ 
    private Foo(final Data someData) { 
     Objects.requireNonNull(someData); 

     this.someData = someData; 
    } 

    // ... 
} 

如何同与科特林达到没有将类分成public接口和private实现?构造函数private导致它无法从课程外部访问,甚至不能从同一个文件访问。

这是可能使用的配套对象:

同伴对象内部
class Foo private constructor(val someData: Data) { 
    companion object { 
     fun constructorA(): Foo { 
      // do stuff 

      return Foo(someData) 
     } 
    } 

    // ... 
} 

的方法可以达到一样,如果他们周围的类的成员(例如Foo.constructorA()

你甚至可以做一些事更类似于在具有私有构造函数的情况下“模拟”公共构造函数的使用。

class Foo private constructor(val someData: Data) { 
    companion object { 
     operator fun invoke(): Foo { 
      // do stuff 

      return Foo(someData) 
     } 
    } 
} 

//usage 
Foo() //even though it looks like constructor, it is a function call