0

GraphicsProgram で画面の幅と高さを使用してボックスを描画するコードを作成し、そこで他のことを行いました。これらのボックスは、画面の縦サイズ (高さ) の 1/6 になります。

私が今持っている方法は、実行メソッドで次のような変数を作成することです。

int boxHeight = getHeight() / 6;

次に、次のような他の方法に移動します。

placeBox(boxHeight);

私の placeBox メソッドでは、次のように変数を取得します。

private void placeBox(int boxHeight) { ..code.. }

それはすべて機能しますが、代わりに定数を使用できるかどうか疑問に思っていました。これは、次のように run メソッドの前に宣言します。

private static final int constantBoxHeight = getHeight() / 6;

ただし、これにより次のコンパイラエラーが発生します。

non-static method getHeight() cannot be referenced from a static context

だから私の質問:定数を正しい方法で実装していますか? そうでない場合、どうすれば正しく実装できますか? また、私がやろうとしていることが可能である場合、変数を実行メソッドからその中のメソッドに移動してから、その中の他のメソッドに移動する代わりに、定数を使用する利点は何ですか?

getHeight() は acm.graphics.* からインポートされます

4

1 に答える 1

0

定数は静的フィールドですが、インスタンス メソッドの戻り値から派生した値で初期化します。インスタンス メソッドにはインスタンスが必要です。静的フィールドはインスタンスに属さないため、インスタンス メソッドで初期化できません。

高さを取得する別の方法がない限り、最初にそのクラスのインスタンスが必要になります。この場合、個人的には定数を使用しません。コードをリファクタリングし、インスタンス メンバーまたはローカル変数を使用することの欠点がない (または少なくとも非常に少ない) からです。

于 2013-11-02T13:19:11.030 に答える