【问题标题】:Master method for multiple primitive arguments in JavaJava中多个原始参数的主方法
【发布时间】:2014-12-27 14:39:24
【问题描述】:

假设我有这些方法:

public void doSomethingInteger(int i){...}
public void doSomethingByte(byte b){...}
public void doSomethingFloat(float f){...}
public void doSomethingDouble(double d){...}

它们都执行相同的操作,只是接受不同格式的变量。

不是为每个方法重写代码以使用不同的变量,有没有办法编写一个可以从这些方法中的每一个调用的方法?

【问题讨论】:

  • 详细信息可能取决于您未向我们展示的代码。我们不知道您的方法应该做什么,所以我认为我们中的任何人都无法根据迄今为止发布的信息为您提供帮助。

标签: java methods parameters primitive-types


【解决方案1】:

您可以使用强制转换。您可能希望将实现放在doSomethingDouble() 中。然后您可以将其他方法定义为:

public void doSomethingInteger(int i) {doSomethingDouble((double)i;}
public void doSomethingByte(byte b) {doSomethingDouble((double)b;}
public void doSomethingFloat(float f) {doSomethingDouble((double)f;}

这些都是widening conversions,所以你不会丢失任何信息。

5.1.2。扩大基元转换

原始类型的 19 种特定转换称为扩展 原始转换:

**byte to** short, int, long, float, or **double**

short to int, long, float, or double

char to int, long, float, or double

**int to** long, float, or **double**

long to float or double

**float to double**

扩展原语转换不会丢失有关 数值的总大小。

从整数类型到另一种类型的扩展原始转换 整数类型,或在 strictfp 表达式中从 float 到 double (§15.4),完全不会丢失任何信息;数值是 保存完好。

【讨论】:

  • 谢谢,我不确定 double 是否能够容纳所有其他原语!
  • 这里不需要投射。
  • @user3718550 所有这些转化为双倍的转化都是扩大转化,所以没有问题。
  • “不丢失信息”是错误的——longdouble 在高于 2^53 的值上会丢失精度。关键词是“整体量级”,但小部分会失去精度。
  • @LouisWasserman 没有人在谈论长期到双重转换。只有 int,byte,float 才能加倍。
【解决方案2】:

你可以写

void doSomething(double d) {

所有其他数字类型; byte, short, char, int, long, float 将扩展为 double

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多