1

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

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

4 回答 4

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类型是 Example 并且 number 是原始类型double。这真的没有意义。

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

于 2013-10-15T11:15:39.507 回答
2

java中的所有原始类型都有它们的包装器:IntegerDouble

根据Java教程:

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

这是自动完成的,所以我不确定您还想将哪个对象“转换”为原始对象?您可以使用类似 your 的方法toDouble(),该方法将返回原语,但根本不会进行强制转换。

于 2013-10-15T11:14:08.250 回答
1

与 C# 的隐式修饰符没有类比。一般来说,Java 中的语法糖比 .NET 中的少。我不认为这是一个问题。您可以查看 Integer、Double、Float 等的源代码。它们都有 floatValue()、longValue() 等方法。使强制转换显式提高了代码的可读性。虽然隐式转换(如 C# 中可用的)非常难以理解。您可以创建自己的方法 yourTypeValue()。这是一种 Java 约定。

于 2013-10-15T11:30:02.973 回答
1

你不能施放,也不会混淆你想要做什么。

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

double number = ex.toDouble();

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

  Double wrapper = new Double(18.0);  //class
  double primitiveDouble =wrapper;    // primitive
于 2013-10-15T11:11:02.870 回答