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有很好的理解,但接口可能需要一些工作,但我非常了解它。