有没有办法在Dart中测试函数或方法的存在而不试图调用它并捕获NoSuchMethodError错误?我正在寻找类似的东西
if (exists("func_name")){...}
Run Code Online (Sandbox Code Playgroud)
测试名为的函数是否func_name存在.提前致谢!
我在飞镖中有三个课程:
class A {}
class B extends A{}
class C extends A{}
Run Code Online (Sandbox Code Playgroud)
有一种方法可以从A获取所有子类吗?
编辑:
感谢Alexandre Ardhuin您的解决方案完美无缺!
我正在学习飞镖我编辑了你的代码并提出了递归解决方案,看看:
import 'dart:mirrors';
class A {}
class B extends A{}
class C extends A{}
class D {}
class E extends C {}
bool isParent(String parent,ClassMirror clazz){
var objectParentName = MirrorSystem.getName(clazz.superclass.simpleName);
if (objectParentName == "Object"){
return parent == "Object";
}
var result = parent == objectParentName;
if (!result){
return isParent(parent,clazz.superclass);
}
return result;
}
List<String> findAllSubclasses(String clazz){
var result = [];
final ms = currentMirrorSystem(); …Run Code Online (Sandbox Code Playgroud) 有Klass静态方法的类fn1
class Klass {
static String fn1() => 'hello';
}
> Klass.fn1(); // hello
Run Code Online (Sandbox Code Playgroud)
但是当Klass分配给一个变量时,调用该方法fn1失败
var k = Klass;
> k.fn1() // "Unhandled exception: Class '_Type' has no instance method 'fn1'.
Run Code Online (Sandbox Code Playgroud)
不太清楚这里发生了什么
我查看了dart:mirrors库,然后找到ClassMirror。当我看到getField我没有看到所有字段的访问权限。我确实看到了getters。
如果我想获得一堂课的所有字段,我必须经过getters吗?
我如何处理这个Java代码的Dart等价物?
Class<?> c = Class.forName("mypackage.MyClass");
Constructor<?> cons = c.getConstructor(String.class);
Object object = cons.newInstance("MyAttributeValue");
Run Code Online (Sandbox Code Playgroud)
(来自Jeff Gardner)
假设我有一个这样的类:
abstract class Foo {
String name bar = 'bar';
}
Run Code Online (Sandbox Code Playgroud)
使用镜像,我们可以得到 的值bar吗?
从dartdocs为InstanceMirror.type:
"返回reflectee实际类的镜像.reflectee的类可能与通过在reflectee上调用runtimeType返回的对象不同."
那么在什么情况下会reflectClass(o.runtimeType)产生不同的结果reflect(o).type呢?
我尝试过示例代码:
import 'dart:mirrors';
class A{}
void main() {
var string = "str";
var boolean = true;
var integer = 5;
var map = {};
var list = [];
var custom = new A();
var strRunT = string.runtimeType;
var strRefT = reflect(string).type.reflectedType;
var boolRunT = boolean.runtimeType;
var boolRefT = reflect(boolean).type.reflectedType;
var intRunT = integer.runtimeType;
var intRefT = reflect(integer).type.reflectedType;
var mapRunT = map.runtimeType;
var mapRefT = reflect(map).type.reflectedType;
var listRunT = list.runtimeType; …Run Code Online (Sandbox Code Playgroud) 谁能给我解释一下 Dart 中注释的使用吗?
在文档中,我找到了这个例子:
library todo;
class todo {
final String who;
final String what;
const todo(this.who, this.what);
}
Run Code Online (Sandbox Code Playgroud)
其次是
import 'todo.dart';
@todo('seth', 'make this do something')
void doSomething() {
print('do something');
}
Run Code Online (Sandbox Code Playgroud)
那么,我应该在 main() 中编写什么来执行 doSomething() 函数呢?
谢谢
我想通过添加更多的键值对来更新我的对象。
Object options = {
"first_name": "Nitish",
"last_name" : "Singh"
}
Run Code Online (Sandbox Code Playgroud)
初始化对象后,我想再添加一个键和值。有没有办法做到这一点。
添加另一个键值对后,我的对象将如下所示
options = {
"first_name" : "Nitish",
"last_name" : "Singh"
"middle_name": "Kumar"
}
Run Code Online (Sandbox Code Playgroud)