Flutter 如何在flatter中将类名用作变量
我有三门课,分别是Flutter 如何在flatter中将类名用作变量,flutter,dart,Flutter,Dart,我有三门课,分别是class\u a.dart,class\u b.dart,和class\u c.dart 每个方法都包含一个名称相同的静态方法myMethod():String,该方法根据它所属的类返回稍微不同的字符串。(本例中只有一个共享方法,但每个类包含数百个方法,所有方法都与其他两个类中的方法共享名称) 在一个不相关的类中,我可以调用ClassA.myMethod(),ClassB.myMethod(),和ClassC.myMethod()。这些呼叫按预期工作。每次我需要拨打其中一个电
class\u a.dart
,class\u b.dart
,和class\u c.dart
每个方法都包含一个名称相同的静态方法myMethod():String
,该方法根据它所属的类返回稍微不同的字符串。(本例中只有一个共享方法,但每个类包含数百个方法,所有方法都与其他两个类中的方法共享名称)
在一个不相关的类中,我可以调用ClassA.myMethod()
,ClassB.myMethod()
,和ClassC.myMethod()
。这些呼叫按预期工作。每次我需要拨打其中一个电话时,我都可以使用此结构来确保我拨打了正确的电话:
开关(usersChoice){
案例“A”:
返回ClassA.myMethod();
案例“B”:
返回ClassB.myMethod();
案例“C”:
返回ClassC.myMethod();
违约:
handleError();
}
这个switch语句按预期工作;但是,由于class_z.dart
的性质,它并不理想,因为除了myMethod():String
之外,它还使用其他方法在整个代码中重复数百次
我知道您可以使用typedesiredClass=ClassA
获取类类型作为变量。我的目标是在程序开始时设置desiredClass
变量,并按如下方式调用每个方法:
///用户想要使用的类。
所需类别;
//在开头设置[desiredClass]。
void setDesiredClass(字符串usersChoice){
交换机(用户交换机){
案例“A”:
desiredClass=ClassA;
打破
案例“B”:
desiredClass=ClassB;
打破
案例“C”:
desiredClass=ClassC;
打破
违约:
handleError();
}
}
///从用户选择的类返回字符串。
///
///像这样的方法有数百种,它们都在调用
///到A、B和C类中的数百个方法。
字符串方法_1(){
返回desiredClass.myMethod();
}
通过使用
setDesiredClass(String):void
方法,我希望像method_1():String
这样的所有方法都能够成为一行程序,而不必在代码中使用数百个开关树。不幸的是,这没有起作用。我能看到的唯一方法是使用数百个开关树。使用静态方法无法做到这一点。您可以创建一个类或接口,并从该类派生或实现该接口(现在您可以了解为什么它不能与静态方法一起工作,它们不能被重写或成为接口的一部分)
然后你的例子变成这样:
YourBaseClassOrInterface? desiredClass;
// Set [desiredClass] at the beginning.
void setDesiredClass(String usersChoice) {
switch (usersChoice) {
case "A":
desiredClass = ClassA();
break;
case "B":
desiredClass = ClassB();
break;
case "C":
desiredClass = ClassC();
break;
default:
handleError();
}
}
请注意,您现在已经为各自的类分配了一个实例,而不是一个类型。您对OOP或接口了解多少?@nvoigt我对OOP有很好的理解,但接口可能需要一些工作,但我非常了解它。