我需要一种方法来检查一个类是否是抽象的。有谁可以帮助我?
答案 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如果它应该被允许实例化一个抽象类(与依赖注入有关),如果上面的方法改变可能不再起作用但我在这个问题上找不到它的东西跟踪器。