[英]Automatic cast from object to primitive type
我一直在寻找一种透明的方式将对象转换为原始类型,例如:
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)
Java中的所有原始类型都有其包装器: Integer
, Double
等。
根据Java教程:
将包装器类型( Integer )的对象转换为其对应的原始( int )值称为拆箱。
而且这是自动完成的,所以我不确定您还想将哪个对象“投射”到原始对象? 您可以使用类似toDouble()
的方法,该方法将返回原始值,但根本不会进行强制转换。
您可以使用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,如上所述。
您无法投射,并且几乎不会混淆您要尝试执行的操作。
如果需要double,则调用toDouble()
double number = ex.toDouble();
甚至有人评论说,使用Double类构造函数Double(double value)
Double wrapper = new Double(18.0); //class
double primitiveDouble =wrapper; // primitive
没有比喻C#的隐式修饰符。 通常,Java中的语法糖少于.NET中的语法糖。 我不这是一个问题。 您可以查看Integer,Double,Float等的源代码。它们都有诸如floatValue(),longValue()等方法。 使强制类型转换明确可提高代码可读性。 尽管隐式强制转换(如C#中可用的)很难理解。 您可以将自己的方法设为yourTypeValue()。 这是一种Java约定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.