我一直在寻找一种将对象转换为基本类型的透明方法,例如:
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)
答案 0 :(得分:2)
java中的所有原始类型都有自己的包装:Integer
,Double
等。
根据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约定。