2017-05-08 32 views
-3

我正在使用帶自定義函數接口的lambda函數來縮短我的代碼中經常出現的一些嵌套循環。因爲我不希望其他參數添加到我的表情和喜歡的東西結束這場都在我的代碼:我可以在重寫的paint(Graphics)中調用getGraphics()嗎?

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

我可以叫getGraphics()進去圖形上下文我@Override public void paint(Graphics g) {...}(而不是使用參數g沒有意外/負面的副作用?

+0

作爲一個相當經驗的用戶,我會很感激以下任何負反饋的意見,讓我知道如何改進我的問題。 –

回答

3

我可以在我的@Override中調用getGraphics()public void paint(Graphics g){...}沒有意外的/消極的副作用嗎?

這是什麼意思? paint已經有對Graphics的引用。

當別人想要使用您的代碼時會發生什麼?他們是否知道不要在paint例程的上下文之外調用這些方法?

會有後果嗎?不是您打算使用它的方式,但是如果您想更改爲使用BufferedStrategy而不是標準繪畫例程,會發生什麼情況?如果您想將結果繪製到BufferedImage,會發生什麼情況?

你已經建立了一個不靈活的解決方案,它有自己的危險副作用。爲了保留好處(沒有一個附加參數),您會失去很多靈活性,重用和自我記錄。

沒有人會用我的代碼

,這僅僅是點的一部分,你應該總是挑戰自己的假設,別人會用你的代碼,它使你成爲一個更好的開發,停止你從採取捷徑或偷工減料。

getGraphics僅僅是一個壞主意一般,應儘可能避免

+0

進一步研究的一個快速問題:它如何與'BufferedStrategy'衝突?我想我會在未來某個時刻解決一些閃爍的問題。感謝您的一般建議,他們幫助了很多。 –

+1

'BufferedStrategy'不像Swing組件那樣使用相同的繪畫過程(例如'JPanel'),它有它自己的'Graphics'上下文,您必須從中獲取它,所以如果您使用' getGraphics',他們你不能使用......不,你甚至不應該考慮重寫'getGraphics'。 Swing是雙緩衝的,但是使用被動渲染引擎,只在需要時更新,「BufferedStrategy」可以讓你直接控制繪畫過程(即直接繪畫) – MadProgrammer

相關問題