我可以在重写的paint(Graphics)中调用getGraphics()吗?

时间:2017-05-08 20:39:17

标签: java graphics awt

我使用带有自定义功能接口的lambda函数来缩短我的代码中经常出现的一些嵌套循环。因为我不想在表达式中添加其他参数,所以在我的代码中以 this 结尾:

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

我可以致电getGraphics()来获取@Override public void paint(Graphics g) {...}内的图形上下文(而不是使用参数g),而不会出现意外/负面的副作用吗?

1 个答案:

答案 0 :(得分:3)

  

我可以在@Override public void paint(Graphics g){...}中调用getGraphics()而不会出现意外/负面副作用吗?

重点是什么? paint已经引用了Graphics

当其他人想要使用您的代码时会发生什么?他们是否知道不要在绘图程序的上下文之外调用这些方法?

有后果吗?不是您打算使用它的方式,但如果您想要更改为使用BufferedStrategy而不是标准绘图例程,会发生什么?如果您想将结果绘制为BufferedImage,会发生什么?

你构建了一个不灵活的解决方案,它有自己的危险副作用。为了保留好处(没有一个额外的参数),你会失去很多灵活性,重用和自我文档。

  

没有人会使用我的代码

这只是其中的一部分,你应该总是挑战自己,假设别人会使用你的代码,它会让你成为一个更好的开发者,阻止你走捷径或偷工减料。

getGraphics一般来说只是一个坏主意,应该尽可能避免