2

How can I set another Class as a Class constructor argument?

class MyClass {
     String message = 'myClass';

     void print() {
         print(this.message);
     }
}

class TestClass {
    var myClass;

    TestClass(???) {
        this.myClass = ???(); // ???
    }

    void debug() {
        print('DEBUG: ');
        this.myClass.print();
    }
}

main() {
 MyClass myClass;
 testClass(myClass);
}
4

3 回答 3

2

你不能(至少现在不能)。您最好的选择是将构建器函数传递给构造函数。

class MyClass {
   var clazzBuilder;

   MyClass(this.clazzBuilder);

   doStuff() {
      var instance = clazzBuilder();
      :
   }
}

然后像这样使用它

var myTest = new MyClass(() => new Test());
var myProd = new MyClass(() => new Prod());

请注意,Dart 团队计划将类概念(.type)和反射添加到语言中。

于 2012-07-30T00:40:26.360 回答
1

你到底想做什么?人们经常尝试将某些语言的范式应用到其他一些语言中,这不是做某些事情的最佳方式

于 2012-07-30T00:42:33.107 回答
0

由于print实例方法而不是静态方法,因此您不需要将本身传递给TestClass,只需传递它的实例即可。您的程序可以这样修复:

class MyClass {
     String message = 'myClass';

     void print() {
         print(this.message);
     }
}

class TestClass {
    var myClass;

    TestClass(MyClass myClass) {
        this.myClass = myClass;
    }

    void debug() {
        print('DEBUG: ');
        this.myClass.print();
    }
}

main() {
 MyClass myClass = new MyClass();
 testClass(myClass);
}

或者,更惯用地说:

class MyClass {
   String message = 'myClass';

   void print() => print(message);
}

class TestClass {
  var myClass;

  TestClass(this.myClass);

  void debug() {
    print('DEBUG: ');
    myClass.print();
  }
}

main() {
  testClass(new MyClass());
}
于 2012-07-31T17:19:08.757 回答