2

色付きの最終的なリストが必要です:

final List<String> COLORS =  ['#cefbe4', '#81ec72', '#5cd646'];
final num MAX = 90;
class Square {
 // ...

MAX では問題ありませんが、リストではコンパイルされません: 初期化子はコンパイル時の定数でなければなりません

私も試しました:

static final num MAX = 90;
class Square {
    final List<String> COLORS =  ['#cefbe4', '#81ec72', '#5cd646'];

新しいエラー:「initializer はコンパイル時の定数でなければなりません」

私が見つけた唯一の解決策は、コンストラクターで初期化することです...私はこの解決策が好きではありません:Squareオブジェクトによるリストインスタンスは必要ありません。どのようにできるのか ?

4

2 に答える 2

2

あなたと同じエラーは発生しません。最初のケースでは、コンパイル時に「Expected constant expression」という警告が表示され、2 番目のケースでは別のコンパイル時警告と実行時エラーが発生します。こちら で入手できる最新の SDK をお試しください。

static final num MAX = 90;
class Square {
    final List<String> COLORS =  ['#cefbe4', '#81ec72', '#5cd646'];

この場合 static は意味がありません。staticは、同じクラスのすべてのインスタンス化されたオブジェクトで同じであるクラス変数を示すためです。この場合、MAXはクラス境界の外にあります。したがって、実行時エラーが表示され、コンパイル時の警告 (「最上位フィールドを静的にすることはできません」) が表示されます。

MAXCOLORSは、Squareクラスのすべてのインスタンスで同じになるはずです。したがって、これを行うのは理にかなっています:

class Square {
    static final List<String> COLORS = const ['#cefbe4', '#81ec72', '#5cd646'];
    static final num MAX = 90;
}
于 2012-07-05T21:27:34.827 に答える
0

リスト自体が最終的な部分であり、内容ではありません。最終リスト内のコンテンツは引き続き追加および削除できます。

final List<String> COLOURS = new ArrayList<String>();

これにより、リストが作成されます。リストの実際の入力は、コンストラクターで、またはコードのどこかで行われます。

私の意見では、これには列挙型を使用する方が適切です。

于 2012-07-05T20:41:00.320 に答える