2013-10-15 3 views
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; 

После нескольких поисков я почти уверен, что он не существует , но если бы была большая помощь.

Update 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) 
+1

Используйте свой собственный 'toDouble'! Без этого вы получите ошибку компиляции. – Maroun

+1

Класс [Double] (http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html) не помог вам? – vels4j

+0

Если 'Example' is и Object, который представляет какое-то числовое состояние, вы можете сделать это как' Example mean = Example.mean (Example ... numbers) '. Внутри реализации «mean» вам придется использовать «double», но вам не нужно подвергать его тому месту, которое работает с 'Example'. – zapl

ответ

1

Не существует аналогии с модификатором implicit C#. В общем, в Java меньше синтаксического сахара, а затем в .NET. Я этого не делаю. Вы можете заглянуть внутрь источников Integer, Double, Float и т. Д. Все они имеют методы наподобие floatValue(), longValue() и т. Д. Создание явных выражений улучшает читаемость кода. Хотя неявные отбрасывания, подобные доступным на C#, очень трудно понять. Вы можете создать свой собственный метод yourTypeValue(). Это своего рода соглашение Java.

+0

Спасибо, я не знал этого; жаль, которого нет в java. – Narkha

+0

Синтаксис сахара может сохранить пару строк кода не более. Я не влияю на производительность. Я бы не злоупотреблял этим. – Mikhail

1

Вы не можете бросить , и немного запутать то, что вы пытаетесь сделать.

Если вам нужно дважды, то вызовите toDouble()

double number = ex.toDouble(); 

или даже, как некоторые из комментариев, используйте конструктор Double класса Double(double value)

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

Все примитивные типы в Java имеют свои фантики: Integer, Double и т. Д.

Согласно учебным пособиям Java:

Преобразования объекта типа обертки (Integer) к соответствующему значению примитивного (INT) называется распаковкой.

И это делается довольно автоматически, поэтому я не уверен, какой объект еще вы хотели бы «придать» примитиву? Вы можете использовать такой метод, как ваш toDouble(), который будет возвращает примитив, но он не будет отличать вообще.

2

Вы можете использовать обертку двойного, 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, как указано выше.

Смежные вопросы