创建不可实例化,不可扩展的类

时间:2018-07-15 02:23:29

标签: class inheritance dart constants

我想创建一个类来对一些static const值进行分组。

// SomeClass.dart
class SomeClass {
  static const SOME_CONST = 'some value';
}

在dart中,防止依赖代码实例化此类的惯用方式是什么?我也想防止扩展到此类。在Java中,我将执行以下操作:

// SomeClass.java
public final class SomeClass {
    private SomeClass () {}
    public static final String SOME_CONST = 'some value';
}

到目前为止,我所能想到的只是抛出Exception,但我希望具有编译安全性,而不是在运行时停止代码。

class SomeClass {
  SomeClass() {
    throw new Exception("Instantiation of consts class not permitted");
  }
  ...

1 个答案:

答案 0 :(得分:3)

为您的课程提供一个私有的构造函数,它将使其只能在同一文件中创建,否则它将不可见。这也防止用户扩展或混入其他文件中的类。请注意,在同一个文件中,您仍然可以扩展它,因为您仍然可以访问构造函数。此外,由于所有类都定义了隐式接口,因此用户将始终能够实现您的类。

class Foo {
  /// Private constructor, can only be invoked inside of this file (library).
  Foo._();

}

// Same file (library).
class Fizz extends Foo {
  Fizz() : super._();
}

// Different file (library).
class Bar extends Foo {} // Error: Foo does not have a zero-argument constructor

class Fizz extends Object with Foo {} // Error: The class Foo cannot be used as a mixin.

// Always allowed.
class Boo implements Foo {}