2012-04-24 4 views
2

これを考えてみましょう:私はJunkValue<HappyObject>パラメータを持っている場合、私はちょうどHappyObjectオブジェクトパラメータを代わりに使用することができるというのが私のコンパイラに伝えたい自動オーバーロードは可能ですか?

void test(HappyObject object){test(JunkValue.fix(object));} 

void test(JunkValue<HappyObject> object){...} 

は今
public static abstract class JunkValue<X>{ 
    public abstract X value(); 
    public static <X> JunkValue<X> fix(final X x){ 
     return new JunkValue<X>() 
      { 

       @Override 
       public X value() { 
        return x; 
       }}; 
    } 
} 

私は簡単にこれらの2つの方法を作ることができますこの効果。

Number=new Number(1)の代わりにNumber=1;を実行できるというアイデアを得ました。これは、Numberを拡張したときから多くの満足を得ています。私は、数字の代わりにオブジェクトで同じ効果が欲しいだけです。

ありがとうございました。

+4

Javaでは演算子のオーバーロードはありません。あなたはそれをオートボクシングと混同しています –

+0

はい私は聞いたことがない何かと混乱しています...私は、感謝のオートボクシングを見上げます。 – Jeremy

答えて

2

オートボクシングは言語仕様の一部であり、コンパイラを変更することなく拡張することはできません。

+0

ありがとうございます。しかし、それは機能でなければならないようだ。奇妙な。 – Jeremy

+0

これは多くの言語での機能です。 Javaは機能が貧弱な傾向があり、設計に複雑さを加えるものを避けます。オートボクシングは混乱を招き、カスタムオートボクシングは有用であるよりも混乱する可能性が高くなります。 –

+0

私は同意する必要があります、私はちょうどきちんとした動的なコーディングが欲しいです。 = x – Jeremy

関連する問題