次のようなクラスがあるとします。
abstract class Foo {
String name bar = 'bar';
}
ミラーを使用して、の値を取得できますbar
か?
次のようなクラスがあるとします。
abstract class Foo {
String name bar = 'bar';
}
ミラーを使用して、の値を取得できますbar
か?
一般的な回答:
super.field
クラスを拡張していて、そのフィールド/ゲッターにアクセスしたい場合に使用できます。あなたは Dado を見ていましたので、この質問に対する一般的な回答ではありませんが、Dado がどのように機能するかについて詳しく説明させてください。
まず、Dado を使用したアプローチはかなり実験的でした。私は言語機能を使用してモジュールの宣言的な定義を要求し、作成者がコード生成で機能しないモジュールを作成できないようにしようとしていました。Dart とミラーにいくつかの変更が加えられたため、このアプローチの実行が困難になったり、少なくともボイラープレートが必要になったりしたため、全体を再考しています。そこにあるテクニックを1つか2つの塩を加えて取り入れてください:)
サンプルやコードを見ていない人のために説明すると、Dado では、モジュール定義の抽象クラスを宣言します。値を持つフィールドは、固定のシングルトン値を宣言しています。これは、従来の DI コンテナーでユーザーが記述しなければならない方法と似ていますbind(Foo).toValue(new Foo())
。
私が(以前は)値を取得する方法は、ミラーを介して抽象クラスをインスタンス化し、単純にフィールドを読み取ることです。dart:mirrors が抽象クラスのインスタンス化を禁止するように変更されたため、これは機能しなくなりました。他のタイプのバインディングは抽象メソッドで宣言されており、それらは非抽象クラスで警告を引き起こすため、これは残念です。