繁体   English   中英

自动从对象转换为基本类型

[英]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中的所有原始类型都有其包装器: IntegerDouble等。

根据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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM