Java中如何解决Point类与double类型不兼容的使用问题
问题原因
你用到的java.awt.Point类默认只支持int类型的坐标参数,构造方法没有提供接收double类型参数的重载,直接传入double值就会触发类型不兼容的报错。
可行解决方案
方案1:不需要保留浮点精度时,强制转换double为int
如果业务场景允许坐标取整,可以在构造Point时对x、y做强制类型转换,修改构造方法代码即可:
public Stad(String namn, int antal, double x, double y){ this.namn = namn; this.antal = antal; // 四舍五入强转double为int,减少精度损失 Point xy = new Point((int)Math.round(x), (int)Math.round(y)); this.koordinater = xy; }
方案2:需要保留浮点精度时,替换Point为支持double的坐标类
直接改用java.awt.geom.Point2D.Double类,它原生支持double类型坐标存储,改动后的完整代码示例:
package Stad; import java.awt.geom.Point2D; public class Stad { private String namn; private int antal; // 替换Point为支持double的Point2D.Double private Point2D.Double koordinater; public Stad(String namn, int antal, double x, double y){ this.namn = namn; this.antal = antal; // 直接传入double参数构造实例 Point2D.Double xy = new Point2D.Double(x, y); this.koordinater = xy; } public String getNamn(){ return namn; } public int getAntal(){ return antal; } public Point2D.Double getKoordinater(){ return koordinater; } public String getInfo(){ String info = "Stad: " + this.getNamn() + "\nAntal invånare: " + this.getAntal() + "\nKoordinater: X=" + koordinater.getX() + " Y=" + koordinater.getY(); return info; } }
方案3:自定义坐标类
如果不想依赖awt包下的类,也可以自己实现一个简单的坐标类,单独存储double类型的x、y值,按需实现对应的get、toString方法即可。
内容的提问来源于stack exchange,提问作者Isabelle Kokkalis
相关产品推荐
相关产品推荐

