有没有办法检查一个类是否是抽象的?

时间:2013-02-12 17:29:27

标签: dart dart-mirrors

我需要一种方法来检查一个类是否是抽象的。有谁可以帮助我?

2 个答案:

答案 0 :(得分:2)

不幸的是,现在的答案是:你做不到。

正如贾斯汀所说,反射能力有Mirrors API。但是,似乎没有“抽象”的标志。

如果这是您想要查看的功能,可以在此处提交功能请求:http://dartbug.com/new

答案 1 :(得分:1)

您可以执行类似

的操作
library x;

import 'dart:mirrors';

abstract class MyAbstract {
  void doSomething();
}

class MyConcrete{
}

void main(List<String> args) {
  print('MyAbstract: ${isAbstract(MyAbstract)}');
  print('MyConcrete: ${isAbstract(MyConcrete)}');
}

bool isAbstract(Type t) {
  ClassMirror cm = reflectClass(t);
  if(cm.declarations.values.firstWhere(
      (MethodMirror mm) => mm.isAbstract == true, orElse: () => null) != null) {
    return true;
  }
  try {
    InstanceMirror i = cm.newInstance(new Symbol(''), []);
  } catch(e) {
    return (e is AbstractClassInstantiationError);
  }
  return false;
}

应该扩展newInstance部分以检查是否没有默认构造函数,而是尝试命名构造函数。

AFAIR最近有a discussion如果它应该被允许实例化一个抽象类(与依赖注入有关),如果上面的方法改变可能不再起作用但我在这个问题上找不到它的东西跟踪器。

同时标明此功能请求:Add a method to check if a class is abstract