2017-05-08 1 views
-3

私はカスタム関数インタフェースでラムダ関数を使用して、自分のコードで定期的に発生するいくつかのネストされたループを短縮しています。私はすべての私のコードの上にこのを私の式にパラメータを追加し、のようなもので終わらせたくないよう:オーバーライドされたペイント(Graphics)内でgetGraphics()を呼び出すことはできますか?

doubleLoop((int i, int j, Graphics graphics) -> drawHexagonRandomColor(i, j, graphics), g);

は、私は(私の@Override public void paint(Graphics g) {...}内のグラフィックスコンテキストを取得するためにgetGraphics()を呼び出すことができますパラメータgを使用する代わりに)予期しない/否定的な副作用がない

+0

可能かなり経験の浅いユーザーとして、私は任意の負のフィードバック次のコメントをいただければと思います避けるべきです。 –

答えて

3

私は(いるgetGraphicsを呼び出すことができます)私の@Overrideます。public voidペイント(グラフィックスグラム){...}内の予期しない/マイナスの副作用なし?

何がポイントですか? paintにはすでにGraphicsという参照があります。

他の誰かがあなたのコードを使用したい場合はどうなりますか?ペイントルーチンのコンテキスト外でこれらのメソッドを呼び出さないことを知っていますか?

結果はありますか?あなたはそれを使用しようとしている方法ではありませんが、標準ペイントルーチンの代わりにBufferedStrategyを使用するように変更したい場合はどうなりますか?代わりに結果をBufferedImageにペイントしたい場合はどうなりますか?

独自の危険な副作用がある柔軟性のないソリューションを構築しました。保存された利益のために(追加のパラメータを1つも持たない)、柔軟性、再利用性、自己文書化の多くが失われます。

誰もポイントの一部だけだ私のコード

を使用していないだろう、あなたはいつもあなたを停止し、それはあなたのより良い開発を行い、他の誰かがあなたのコードを使用することを想定して自分自身に挑戦すべきですショートカットやコーナーを切断することから。

getGraphicsは、一般的にちょうど悪い考えであり、私は私の質問を改善する方法を知っているだろうように、どこ

+0

さらなる研究のための素早い質問:「BufferedStrategy」とはどのように矛盾しますか?私は将来の解決に向けていくつかのちらつきの問題があると思う。一般的なアドバイスをありがとう、彼らは多くを助けます。 –

+1

'BufferedStrategy'はSwingコンポーネント(例えば' JPanel'など)と同じペインティングプロセスを使用しません。独自の 'Graphics'コンテキストを持っていますので、 getGraphics'を内部的に使うと、それらを使うことができなくなるでしょう...いいえ、あなたは 'getGraphics'をオーバーライドすることも考えてはいけません。 Swingはダブルバッファーですが、パッシブレンダリングエンジンを使用し、必要なときにのみ更新します。 'BufferedStrategy'は、ペイントプロセスを直接制御(直接ペイント)します。 – MadProgrammer

関連する問題