当前位置: 首页 > 面试题库 >

由原始类型引起的代码重复:如何避免精神错乱?

卫弘图
2023-03-14
问题内容

在我的一个Java项目中,由于Java处理(而非)原语的方式,我受到代码重复的困扰。不必后手动复制到四个不同的位置相同的变化(intlongfloatdouble
再次 ,对于 第三次 的时候, 再次 我来到非常接近(?)来抢购。

共识似乎收敛到两个可能的选择:

  • 使用某种代码生成器。
  • 你能做什么? 这就是生活!

嗯,第二种 解决方案
是我现在正在做的事情,并且它对我的理智逐渐变得危险,就像众所周知的酷刑技术一样。

自问这些问题和Java 7诞生以来已经过去了两年。因此,我希望有一个更简单和/或更标准的解决方案。

  • Java 7是否有任何更改可以缓解这种情况下的 压力 ?我在简明的变更摘要中找不到任何内容,但也许某个地方有一些晦涩的新功能?

  • 尽管可以选择源代码生成,但我更喜欢使用标准JDK功能集支持的解决方案。当然,可以使用cpp或其他代码生成器来工作,但会添加更多依赖项,并且需要更改构建系统。

似乎由JDK支持的唯一种类的代码生成系统是通过注释机制。我设想了一个处理器,它将像这样扩展源代码:

    @Primitives({ "int", "long", "float", "double" })
@PrimitiveVariable
int max(@PrimitiveVariable int a, @PrimitiveVariable int b) {
    return (a > b)?a:b;
}

理想的输出文件将包含此方法的四个请求的变体,最好包含相关的Javadoc注释等。是否存在注释处理器来处理这种情况?如果没有,建造一个将需要什么?

  • 也许最近又出现了其他一些花样?

编辑:

重要说明:除非有理由,否则我不会使用原始类型。即使在现在,在某些应用程序中使用盒装类型也会对​​性能和内存产生非常实际的影响。

编辑2:

使用max()作为一个例子允许使用的compareTo()是在所有的数字boxed类型可用的方法。这有点棘手:

int sum(int a, int b) {
    return a + b;
}

在不实际编写六到七次的情况下,如何能支持所有数字盒装类型的此方法?


问题答案:

我倾向于使用“超级类型”,例如,long或者double仍然需要原始类型。性能通常非常接近,并且避免了产生很多变化。顺便说一句:64位JVM中的寄存器无论如何都将是64位的。



 类似资料:
  • 在上面,我有类似的10个if条件,如何避免上面的重复代码?我需要使用任何Java8个函数类作为参数来避免重复代码(或者)必须使用任何额外的泛型代码吗?

  • 我正在开发一个旧的Struts应用程序,它有一个抽象操作,通过填充Excel模板文件来创建Excel导出。 每个Excel导出操作都扩展此父类,并添加自己的实现来填充Excel模板,并定义自己的模板和输出文件名。 实现是这样的,这就是SonarQube“警告”代码重复的地方: 有没有办法避免重复?

  • 我使用for循环将学生详细信息添加到ArrayList。当我给第二个学生提供详细信息时,它会覆盖第一个数据。螺柱类 将数据添加到ArrayList的主类。 输出:第二个数据[2,2]后的实际输出辊数[1]。预期输出应为卷号: A1姓名: F1 L1性别:男性年龄: 11体育赛事:标枪 报名号:A2姓名:F2 L2性别:女年龄:14体育项目:100米跑 报名号:A3姓名:F3 L3性别:男性年龄:1

  • 我有下一个示例代码: 你可以看到id是JSON格式中的一个重复字段,我知道PostgreSQL有一些功能可以避免这个问题,但我找不到。

  • 问题内容: 我需要将一个以’\ n’分隔的文本字段(描述)解析为三个单独的字段。我通过利用和来执行此操作,但是它导致难以阅读和重复的sql。有没有一种方法可以创建和使用变量或表达式来保存instring函数返回的“位置”值,因此我可以将该变量传递给它?我在下面发布的代码可以正常工作并返回正确的结果,但是感觉不正确。有很多重复。 相关原始数据: 所需结果: 当前代码: 问题答案: 我建议使用哪一个功

  • 我有一个简单的项目,该项目将个人信息提供给数据库(sqlite),现在我想避免插入重复值(按名称),我不能做什么?谢谢你们