Java 将刚收到的变量转换为参数最优雅的方法是什么?

Java 将刚收到的变量转换为参数最优雅的方法是什么?,java,graphics,Java,Graphics,更具体地说,在调用Graphics2D对象的绘制中,最优雅的方式是什么 public void paint(Graphics g) { // How do I convert/cast/etc the g variable to a Graphics2D object? } 还是我没抓住重点?总的来说,有没有更好的方法来处理这个问题 Graphics2D g2 = (Graphics2D)g; 没有必要对它抱有幻想 在绘制方法中,您将始终收到G2D 我甚至喜欢调用图形参数g2,然后将

更具体地说,在调用Graphics2D对象的绘制中,最优雅的方式是什么

public void paint(Graphics g) {
    // How do I convert/cast/etc the g variable to a Graphics2D object?
}
还是我没抓住重点?总的来说,有没有更好的方法来处理这个问题

Graphics2D g2 = (Graphics2D)g;
没有必要对它抱有幻想

在绘制方法中,您将始终收到G2D

我甚至喜欢调用图形参数g2,然后将其转换为名为g的Graphics2D,以简化使用

Graphics2D g2 = Graphics2D.class.cast(g);
没有必要对它抱有幻想

在绘制方法中,您将始终收到G2D


我甚至喜欢调用图形参数g2,然后将其转换为名为g的Graphics2D,以使其使用更简单。

据我所知,在这种情况下,您不能做太多。
Graphics2D g2 = Graphics2D.class.cast(g);

您可以在强制转换之前验证是否确实获得了Graphics2D对象。但是,据我所知,你可以得到任何其他东西。

据我所知,在这种情况下,你做不了多少。 您可以在强制转换之前验证是否确实获得了Graphics2D对象。但是,据我所知,你可以得到任何其他东西。

我个人喜欢

Graphics2D g2 = g as Graphics2D;
if (g2 == null)
//do stuff
但正如前面所说,没有理由让它变得更复杂:我个人喜欢

Graphics2D g2 = g as Graphics2D;
if (g2 == null)
//do stuff

但正如前面所说的,没有理由让它变得更复杂:p

这没有直接关系,但在Scala中,他们认识到了这种不愉快——并鼓励您使用模式匹配来处理正确的类而不是类型转换:

g match { 
     case Graphics2D(g2d) => //code goes here !
     case _ => Nothing //or throw exception etc
}
他们积极地阻止强制转换—没有特殊的强制转换语法,只有一个方法


与你不完全相关,但认为值得注意的是,别人被你的烦恼所困扰

这并不直接相关,但在Scala中,他们认识到了这种不愉快——并鼓励您使用模式匹配来处理正确的类而不是类型转换:

g match { 
     case Graphics2D(g2d) => //code goes here !
     case _ => Nothing //or throw exception etc
}
他们积极地阻止强制转换—没有特殊的强制转换语法,只有一个方法


与你不完全相关,但认为值得注意的是,别人被你的烦恼所困扰

所以你总是收到一个?为什么声明中的参数是Graphics g,而没有Graphics 2D g替代替代替代?在内部,是否将Graphics2D对象强制转换为图形对象以实现向后兼容性,然后如果需要,您可以将其还原为Graphics2D?由于某些历史原因,您将获得一个图形对象,我已经不再关心这些了。如果我需要G2D方法,我总是进行转换。您可能希望使用g作为Graphics2D变量,因为它将在整个代码中使用。您还可以拥有一个通用组件,并使用使用Graphics2D而不是图形作为参数的界面转发到渲染器。所以您总是收到一个?为什么声明中的参数是Graphics g,而没有Graphics 2D g替代替代替代?在内部,是否将Graphics2D对象强制转换为图形对象以实现向后兼容性,然后如果需要,您可以将其还原为Graphics2D?由于某些历史原因,您将获得一个图形对象,我已经不再关心这些了。如果我需要G2D方法,我总是进行转换。您可能希望使用g作为Graphics2D变量,因为它将在整个代码中使用。您还可以使用一个通用组件,并使用使用Graphics2D而不是图形作为参数的接口转发到渲染器。。我的错。我困了:哦,是爪哇。。我的错。我困了:哦