gpt4 book ai didi

class - 在 Dart 中,使用 Mirrors,如何从类的实例调用类的静态方法?

转载 作者:行者123 更新时间:2023-12-03 22:32:29 24 4
gpt4 key购买 nike

如果我有一个实例,并且我知道该实例的类包含一个名为 statFn() 的静态方法,我该如何从该实例调用 statFn()

例如,

abstract class Junk {
...
}
class Hamburger extends Junk {
static bool get lettuce => true;
...
}
class HotDog extends Junk {
static bool get lettuce => false;
...
}

Junk food; // either Hamburger or Hotdog

// how do you get lettuce of food's type?

最佳答案

这应该可以帮助您入门。findStaticAndInvoke() 查看所提供对象的类及其静态方法或 getter 的子类,并在找到时调用它。

library x;

import 'dart:mirrors';

abstract class Junk {
static void doSomething() {
print("Junk.doSomething()");
}
}

class Hamburger extends Junk {
static bool get lettuce => true;
}

class HotDog extends Junk {
static bool get lettuce => false;
}

Junk food; // either Hamburger or Hotdog

void main(List<String> args) {
Junk food = new HotDog();
findStaticAndInvoke(food, "doSomething");
findStaticAndInvoke(food, "lettuce");

food = new Hamburger();
findStaticAndInvoke(food, "doSomething");
findStaticAndInvoke(food, "lettuce");
}

void findStaticAndInvoke(o, String name) {
ClassMirror r = reflect(o).type;
MethodMirror sFn;
var s = new Symbol(name);

while (sFn == null && r != null) {
sFn = r.staticMembers[s];
if(sFn != null) {
break;
}
r = r.superclass;
}

if(sFn != null) {
if(sFn.isGetter) {
print(r.getField(s).reflectee);
}
else {
r.invoke(s, []);
}
}
}

关于class - 在 Dart 中,使用 Mirrors,如何从类的实例调用类的静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20743346/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com