我使用带有自定义功能接口的lambda函数来缩短我的代码中经常出现的一些嵌套循环。因为我不想在表达式中添加其他参数,所以在我的代码中以 this 结尾:
doubleLoop((int i, int j, Graphics graphics) -> drawHexagonRandomColor(i, j, graphics), g);
我可以致电getGraphics()
来获取@Override public void paint(Graphics g) {...}
内的图形上下文(而不是使用参数g
),而不会出现意外/负面的副作用吗?
答案 0 :(得分:3)
我可以在@Override public void paint(Graphics g){...}中调用getGraphics()而不会出现意外/负面副作用吗?
重点是什么? paint
已经引用了Graphics
。
当其他人想要使用您的代码时会发生什么?他们是否知道不要在绘图程序的上下文之外调用这些方法?
有后果吗?不是您打算使用它的方式,但如果您想要更改为使用BufferedStrategy
而不是标准绘图例程,会发生什么?如果您想将结果绘制为BufferedImage
,会发生什么?
你构建了一个不灵活的解决方案,它有自己的危险副作用。为了保留好处(没有一个额外的参数),你会失去很多灵活性,重用和自我文档。
没有人会使用我的代码
这只是其中的一部分,你应该总是挑战自己,假设别人会使用你的代码,它会让你成为一个更好的开发者,阻止你走捷径或偷工减料。
getGraphics
一般来说只是一个坏主意,应该尽可能避免