6

次のようなクラスがあるとします。

abstract class Foo {
  String name bar = 'bar';
}

ミラーを使用して、の値を取得できますbarか?

4

1 に答える 1

1

一般的な回答:

  • super.fieldクラスを拡張していて、そのフィールド/ゲッターにアクセスしたい場合に使用できます。
  • クラス宣言を反映している場合、現在、メソッド本体を含む本体または初期化子をイントロスペクトすることはできません。アナライザーまたは dart2js を使用する必要があります。
  • ダドは... それがどのように機能するかについて興味深いです。抽象クラスをインスタンス化しようとしますが、実際には機能しなくなります。

あなたは Dado を見ていましたので、この質問に対する一般的な回答ではありませんが、Dado がどのように機能するかについて詳しく説明させてください。

まず、Dado を使用したアプローチはかなり実験的でした。私は言語機能を使用してモジュールの宣言的な定義を要求し、作成者がコード生成で機能しないモジュールを作成できないようにしようとしていました。Dart とミラーにいくつかの変更が加えられたため、このアプローチの実行が困難になったり、少なくともボイラープレートが必要になったりしたため、全体を再考しています。そこにあるテクニックを1つか2つの塩を加えて取り入れてください:)

サンプルやコードを見ていない人のために説明すると、Dado では、モジュール定義の抽象クラスを宣言します。値を持つフィールドは、固定のシングルトン値を宣言しています。これは、従来の DI コンテナーでユーザーが記述しなければならない方法と似ていますbind(Foo).toValue(new Foo())

私が(以前は)値を取得する方法は、ミラーを介して抽象クラスをインスタンス化し、単純にフィールドを読み取ることです。dart:mirrors が抽象クラスのインスタンス化を禁止するように変更されたため、これは機能しなくなりました。他のタイプのバインディングは抽象メソッドで宣言されており、それらは非抽象クラスで警告を引き起こすため、これは残念です。

于 2014-05-19T22:00:59.960 に答える