从对象到基本类型的自动转换

时间:2013-10-15 11:09:18

标签: java casting

我一直在寻找一种将对象转换为基本类型的透明方法,例如:

class Example {
    double number;

    public Example(double number) {
        this.number = number;
    }

    // this or something similar to this
    public toDouble() {
        return number;
    }

    ...
}

Example ex = new Example(18.0);
double number = ex;

经过几次搜索,我几乎可以肯定它不存在,但是如果有很大帮助的话。

更新1

如果问题不是很明确,请原谅。

我正在为内部工具开发一个代码编辑器:想法是用一组简化的java指令编写一个程序,转换为java并编译。

我希望避免编辑器必须多次进行相同的演员表或调用相同的调用,并且有时候翻译会非常复杂。

更好的例子可能是:

简化代码

Example ex = new Example(18.0);
Example ex2 = new Example(23.0);

Example mean = Mean(ex + 1.0, ex2, 3.0);

(我宁愿避免Example mean = Mean(ex.toDouble() + 1.0, ex2.toDouble(), 3.0);

和java中的函数

double Mean(double... numbers)

4 个答案:

答案 0 :(得分:2)

java中的所有原始类型都有自己的包装:IntegerDouble等。

根据Java教程:

  

将包装类型( Integer )的对象转换为其对应的基元( int )值称为拆箱。

这是非常自动完成的,所以我不确定你想把哪个对象“投射”到原语?您可以使用toDouble()之类的方法,它会返回原语,但根本不会进行投射。

答案 1 :(得分:2)

您可以使用double的包装,Double

Double d = new Double(10.3);
double d1 = d; // This will be auto(un)boxing and not casting
  

将对象强制转换为基本类型的透明方式

double number = ex;这是非法的,因为ex的类型为示例,而数字是基本类型double。这真的没有意义。

您需要使用toDouble(),或者完全删除Example类并使用上面提到的包装类Double。

答案 2 :(得分:1)

你不能施展,也不会混淆你想要做的事情。

如果您需要加倍,请致电toDouble()

double number = ex.toDouble();

甚至,正如有人评论的那样,使用Double类构造函数Double(double value)

  Double wrapper = new Double(18.0);  //class
  double primitiveDouble =wrapper;    // primitive

答案 3 :(得分:1)

与C#的implicit修饰符没有类比。一般来说,Java中的语法糖含量较少。我不这是一个问题。您可以查看Integer,Double,Float等内部源代码。它们都有floatValue(),longValue()等方法。使强制转换可以提高代码的可读性。虽然C#中提供的隐式转换很难理解。您可以使用自己的方法yourTypeValue()。这是一种Java约定。