gpt4 book ai didi

class - 创建一个不可实例化、不可扩展的类

转载 作者:行者123 更新时间:2023-12-01 00:17:24 25 4
gpt4 key购买 nike

我想做一个类(class)来分组一些static const值(value)观。

// 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");
}
...

最佳答案

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

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 {}

关于class - 创建一个不可实例化、不可扩展的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51344769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com