避免 Dart 中类的继承

2023-12-21

Dart 有没有办法避免继承? 我正在寻找类似的东西

final class MyJavaClass {
    ...
}

不直接,不。

您可以编写一个带有私有构造函数的类并通过静态方法访问它们:

class MyFinalClass {
  MyFinalClass._ctor1() {}
  MyFinalClass._ctor2(String param1, String param2) {}
  static MyFinalClass getInstance() {
    return new MyFinalClass._ctor1();
  }
  static MyFinalClass getInstanceWithParams(String param1, String param2) {
    return new MyFinalClass._ctor2(param1, param2);
  }
}

但这有多个问题:

  • 同一库中的类仍然可以对其进行子类化 - Dart 中的可见性适用于库,而不是单个类。
  • 这是很多代码,随着构造函数的数量而扩展。
  • 它引入了许多静态方法,所有这些方法都必须以不同的方式命名。
  • 当然,您不能在其库之外实例化该类new关键词。
  • 这只会阻止类的扩展。实现“最终”类仍然是可能的。

最终,这些是此功能的一些缺点。由您决定是否真的值得。

EDIT

与我之前写的相反,工厂构造函数也可以工作,消除了“无法实例化”new关键字”的缺点。

class MyFinalClass {
  factory MyFinalClass.ctor1() {}
  factory MyFinalClass.ctor2(String param1, String param2) {}
  void method1() {}
  void method2() {}
}

另外,为了说明为什么实现非最终类的能力是一个大问题:

class Sub implements MyFinalClass {
  MyFinalClass _d;
  Sub.ctor1() {
    _d = new MyFinalClass.ctor1();
  }
  Sub.ctor2(String p1, String p2) {
    _d = new MyFinalClass.ctor2(p1,p2);
  }
  void method1() => _d.method1();
  void method2() {
    // do something completely different
  }
}

这种伪子类化也适用于静态方法变体。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

避免 Dart 中类的继承 的相关文章

  • Flutter 应用程序错误 - 类型“Timestamp”不是类型“DateTime”的子类型

    我正在获取数据云 firestore 并尝试使用以下代码在我的应用程序中显示 new Text timeago format document data tripDoc docCreatedOn 我在用着timeagodart 包来格式化它
  • 如何检测颤振中的滑动

    我尝试使用 flutter 的滑动检测器插件来实现向右滑动导航到新屏幕 但它不起作用 不会引发任何错误 并且在调试它时永远不会命中断点 我研究了 GestureDector 但我不确定它是否适用于向右滑动的场景 我们希望它在屏幕上的任何位置
  • Flutter:CachedNetworkImage不缓存图像

    我有一个从 Firebase 存储中检索图像的小部件 但现在我想缓存这些图像 以使用户体验更加简洁 并且还避免对 Firebase 的不必要的调用 所以我找到了 CachedNetworkImageProvider 它听起来像是我想要的一切
  • Flutter 导航到其他页面中的特定选项卡

    我正在尝试从一个页面导航到另一页面并设置选项卡栏的索引 这是我在第一页的代码 GestureDetector onTap Navigator push context MaterialPageRoute builder context gt
  • 如何在flutter中绘制自定义形状卡片

    我只想创建这样的卡片 代码如下 我用的是CustomPaint小部件绘制自定义形状 然后在内部使用堆栈Card正确放置小部件的小部件 我没有图像 所以将其更改为粉红色以显示图像 这是卡片小部件的代码 然后是CustomPainter cla
  • 保留选项卡视图页面之间的状态

    issue 我有两个ListViews渲染内部TabBarView用一个TabController 我如何在每个之间保留状态 由于缺乏更好的词 ListView这样 1 小部件不会重建 2 ListView选项卡之间的位置会被记住 相关代码
  • Flutter:处理错误 Dio Package(404,400 等)

    我正在学习通过包的 ID 搜索数据DIO https pub dev packages dio https pub dev packages dio 我的问题是每次我输入错误的关键字搜索时 应用程序都会突然崩溃并显示调试消息404 未找到
  • firestore 数据在 then() 之外变为 null

    String username Future
  • 嵌套 Polymer Dart UI 中的自定义事件

    我在概念化如何访问特定的 CustomEvent 时遇到一些困难 这是我的问题 我有一个name form html我导入的nok html and pt html name form html有一个自定义事件 用于发布表单的可观察模型 然
  • 如何在 Flutter 中将国际化对象传递给子控件

    刚刚开始使用 Flutter dart 过渡到 PHP 并努力弄清楚如何将类传递到小部件中 我正在努力使用 flutter 创建我的第一个 Android 和 iOS 应用程序 我正在处理国际化 并且使用我拥有的国际化类在我的初始构建页面上
  • 如何在加载到页面之前初始化聚合物元素的国际化

    我正在使用 Dart 构建 Polymer 应用程序 由于我在 Polymer 元素中使用 Dart 的国际化功能 因此我想在创建 Polymer 元素之前初始化国际化消息 并在 Polymer 元素中显示给定区域设置的适当消息 如何才能做
  • Flutter Firestore 查询嵌套子集合

    我正在尝试查询 Firebase 中的子集合 但我总是得到一个空列表 这是我的查询 Firestore instance collection messages where idFrom isEqualTo userID snapshots
  • 如何使用 Flutter (Dart) 在 android 13 (API 33) 上保存文件

    文件不仅仅是媒体文件 也可能是 pdf zip xls 等 API 33 上的外部存储权限被永久拒绝 所以 我们不能像这样的方法来保存 gt String path This is external storage path File pa
  • 导航到新屏幕时状态栏颜色

    我在我的中使用以下build 第一个屏幕更改状态栏颜色的方法 效果很好 1st screen s build method SystemChrome setSystemUIOverlayStyle SystemUiOverlayStyle
  • 如何使用 SingleChildScrollView 使 Stacklayout 可滚动?

    我正在尝试使用 SingleChildScrollView 使堆栈布局可滚动 但它不滚动 这里应该使用SingleChildScrollView吗 我想我已经给出了足够的描述 可以让任何人理解我的问题 这里有更多文本以满足 StackOve
  • Dart:快照与 AOT

    我正在搜索很多关于这种伟大语言的信息 并找到了这个页面https github com dart lang sdk wiki Snapshots https github com dart lang sdk wiki Snapshots但它
  • Flutter 命令删除 .pub-cache 文件夹中的包

    如何删除flutter包 pub cache文件夹 当我们给予flutter clean 它将删除当前目录中的build文件夹 我们可以手动删除 但是我的要求是删除里面的包 pub cache使用命令的文件夹 要清除全局 PUB CACHE
  • 尝试将 Flutter 应用上传到 ItunesConnect 时出现 UIWebView 错误

    我正在尝试将我的应用程序上传到应用程序商店 但是我不断收到错误消息 表明我的应用程序存在此问题 ITMS 90809 已弃用的 API 使用 不再接受使用 UIWebView 的新应用程序 相反 使用 WKWebView 可以提高安全性和可
  • 如何使用 Firebase_Auth 和 Flutter 登录 Twitter

    一个人应该如何编程使用 Twitter 登录特征使用firebase auth https pub dev packages firebase auth和颤动 我看到一些使用的例子flutter twitter login https pu
  • 类型“Future”不是类型转换中“List”类型的子类型

    我试图从我的 Firestore 中获取确定集合中的所有文档 之后 我想将它们设置在文档列表中 列表的每个位置代表一个文档 但是 当我编写代码时 我收到此错误 类型 Future 不是类型转换中类型 List 的子类型 import pac

随机推荐