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 に答える
1

C# の暗黙の修飾子との類推はありません。一般に、.NET よりも Java の方がシンタックス シュガーが少ないです。これは問題です。Integer、Double、Float などのソースの中を見ることができます。それらにはすべて、floatValue()、longValue() などのメソッドがあります。キャストを明示的にすると、コードの可読性が向上します。C# で利用できるような暗黙のキャストは、理解するのが非常に困難です。独自のメソッド yourTypeValue() を作成できます。これは一種の Java 規則です。

于 2013-10-15T11:30:02.973 に答える