You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何复用针对类不同属性的重复逻辑代码?

代码复用方案建议

针对你遇到的X/Y轴逻辑重复问题,推荐用枚举+通用方法的方式重构,既符合Java语法规范,又能彻底消除重复代码,新手也容易上手。

1. 定义坐标轴枚举

先创建一个Axis枚举,把X、Y轴抽象成固定的枚举值,作为通用方法的参数区分不同轴:

public enum Axis {
    X, Y
}

2. 提取通用坐标获取方法

把原来的getX()、getY()逻辑合并成一个接受Axis参数的通用方法,避免重复分支判断:

// 假设你的顶点类有getX()、getY()方法
private double getCoordinate(Vertex vertex, Axis axis) {
    switch (axis) {
        case X:
            return vertex.getX();
        case Y:
            return vertex.getY();
        default:
            throw new IllegalArgumentException("不支持的坐标轴类型");
    }
}

3. 重构重复的轴相关方法

把areDiffX/Y、compareTriangleDomain/Codomain这类重复方法,改成接受Axis参数的通用方法:

示例1:合并areDiffX/Y

// 替代原来的areDiffX和areDiffY
private boolean areVerticesDiff(Vertex v1, Vertex v2, Axis axis) {
    // 几何计算注意浮点数精度,不要直接用==判断相等
    return Math.abs(getCoordinate(v1, axis) - getCoordinate(v2, axis)) > 1e-9;
}

示例2:合并compareTriangleDomain/Codomain

假设compareTriangleDomain是比较三角形在某轴上的最小值,compareTriangleCodomain是比较最大值,可统一成:

private int compareTriangleRange(Triangle t1, Triangle t2, Axis axis, boolean compareMin) {
    double range1 = getTriangleRange(t1, axis, compareMin);
    double range2 = getTriangleRange(t2, axis, compareMin);
    return Double.compare(range1, range2);
}

// 获取三角形在指定轴上的最小/最大值
private double getTriangleRange(Triangle triangle, Axis axis, boolean getMin) {
    Vertex v1 = triangle.getVertex1();
    Vertex v2 = triangle.getVertex2();
    Vertex v3 = triangle.getVertex3();
    
    double val1 = getCoordinate(v1, axis);
    double val2 = getCoordinate(v2, axis);
    double val3 = getCoordinate(v3, axis);
    
    return getMin ? Math.min(Math.min(val1, val2), val3) : Math.max(Math.max(val1, val2), val3);
}

4. 调用重构后的方法

原来的调用:

areDiffX(v1, v2);
compareTriangleDomainX(t1, t2);
compareTriangleCodomainY(t1, t2);

改成:

areVerticesDiff(v1, v2, Axis.X);
compareTriangleRange(t1, t2, Axis.X, true); // true表示比较最小值(domain)
compareTriangleRange(t1, t2, Axis.Y, false); // false表示比较最大值(codomain)

额外注意点

  • 浮点数比较必须用误差范围(比如1e-9),避免因精度丢失导致错误判断
  • 如果后续需要扩展3D三角形,只需在Axis枚举中添加Z,并修改getCoordinate方法即可,扩展性极强

内容的提问来源于stack exchange,提问作者Thay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 16:05:28