我可以在Dart中动态调用静态方法吗?

时间:2019-11-21 23:36:39

标签: dart

我可以动态调用实例的方法,但是我无法调用静态方法(以在不需要实例时节省资源)。

主要思想是为不同级别的课程编码3-4类,然后使用所选的课程(根据用户的选择)。

data class Travel(var expectedArrivalDate: Date? = null);

lateinit var keyValue: Map.Entry<String, List<Travel>>;
val today = Date.from(Instant.now())
val tomorrow = Date.from(Instant.now().plusSeconds(86400))

val todayCount = keyValue.value.mapNotNull(Travel::expectedArrivalDate).count {
    it.after(today) && it.before(tomorrow)
}

非常感谢你!

1 个答案:

答案 0 :(得分:0)

您始终可以引入一个界面:

abstract class Course {
  String get level;
  void sayHello();
}

实现该界面:

class Beginner implements Course {
  @override
  String get level => 'beginner';

  @override
  void sayHello() {
    print('Hello from $level');
  }
}

您可以像这样存储实例:final courses = <Course>[Beginner(), Intermediate()];

这种方法有很多问题。

  

(在不需要实例时节省资源)

不用担心。好像过早的优化。如果您遇到围绕类实例化的性能问题,则可以随时尝试对其进行优化。

您将无法按级别查找所需的类实例。因此,我将按级别创建查找映射:

final courseByLevel = <String, Course>{
  'beginner': Beginner(),
  'intermediate': Intermediate()
};

通过这种方式,您可以获得相同的类实例,并且可以通过courseByLevel['beginner']表达式轻松获取它。