我想为我的Circe类提供一个替代的构造函数,其中的中心和半径是从3个点计算出来的.但我找不到一种方法将计算出的中心存储到时间变量,并将其传递给两个最终字段.调用_getCenter两次是可行的,但这种方法不是最优的.有没有更有效的方法?

import 'dart:math';

class Circle {
  final Point center;
  final double radius;

  Circle(this.center, this.radius);

  Circle.fromPoints(Point p1, Point p2, Point p3)
      : center = _getCenter(p1, p2, p3),
        radius = _getCenter(p1, p2, p3).distanceTo(p1);

  static Point _getCenter(Point p1, Point p2, Point p3) {
    ...
  }

推荐答案

你可以使用factory constructor:

import 'dart:math';

class Circle {
  final Point center;
  final double radius;

  Circle(this.center, this.radius);

  factory Circle.fromPoints(Point p1, Point p2, Point p3) {
    final center = _getCenter(p1, p2, p3);
    final radius = center.distanceTo(p1);

    return Circle(center, radius);
  }

  static Point _getCenter(Point p1, Point p2, Point p3) {
    ...
  }
}

这种构造函数的要点是行为类似于构造函数,但不会自动创建任何对象实例.然后,必须返回一个与工厂构造函数所属的类兼容的对象.

Dart相关问答推荐

为什么在穷举switch 表达式中需要显式向下转换?

Flutter 是否提供即时应用程序?

在 Flutter 中从树中临 timeshift 除时保留小部件状态

在Dart中进行系统调用?

Flutter drawArc() 方法绘制完整的圆而不仅仅是圆弧

你如何在 Polymer 中调度和监听自定义事件?

将 Flutter 前端与 Android 和 iOS 的 .NET Core 后端相结合

如何在动态链接中传递参数?

如何在 Dart 中使用类型Aliases/Typedefs(也是非函数)?

Flutter 如何使用 ListTile 三行

如何在 URL 中获取查询参数

如何在 Angular.Dart 中以编程方式添加组件?

Dart:如何判断变量类型是否为字符串

带范围的dartswitch

使用 Dart 解析 URI 以提取查询参数

函数调用前的感叹号是什么意思?

如何在 Dart 中获取文件名?

如何在 Dart 中进行整数除法?

dart中的动态和对象有什么区别?

如何用 Dart 格式化日期?