0

プロジェクトでは、ジェネリックで型定義を使用する多くのクラスを使用しています<? extends Comparable>Boolean比較することはできませんが、このクラスをブール値でも使用したいので、次のような独自のクラスを作成しましたComparableBoolean

(Boolean は final であるため、同等のプロキシ クラスを作成しました)

public class ComparableBoolean extends Object implements Serializable, Comparable<ComparableBoolean>{

private static final long serialVersionUID = 1L;
static Boolean FALSE = Boolean.FALSE;
static Boolean TRUE = Boolean.TRUE;

private Boolean booleanObject;

protected Boolean getBooleanObject(){
    return this.booleanObject;
}

public ComparableBoolean(boolean value){
    this.booleanObject = new Boolean(value);
}

public ComparableBoolean(String s){
    this.booleanObject = new Boolean(s);
}

/**
 * Will return 0, when both Booleans are equal, -1 else.
 */
@Override
public int compareTo(ComparableBoolean another) {
    if (this.getBooleanObject() == another.getBooleanObject()){
        return 0;
    }else{
        return -1;
    }
}   

//Functions derived from final class Boolean
/* A Lot of Proxy functions mapping x() to Boolean.x()
}

これはこれまでのところ機能しており、ブール値が別のブール値よりも小さくも大きくもならないことを知っていても、これは私の要件を満たしています。

しかし今、私は「時々」「ComparableBoolen」を「Boolean」に、またはその逆にキャストする必要があるという問題に直面しています。

カスタム「キャスト」を定義する可能性があるかどうか疑問に思っています。

私の調査では、(私の場合) のように、独自のキャストを定義する可能性があることが示されました。

public static implicit operator Boolean (ComparableBoolen cb)  
{ 
   return cb.getBooleanObject();
}

public static explicit operator ComparableBoolean(Boolean b) 
{
    return new ComparableBoolean(b);
}

このすべて-グーグルが言った:P-CustomConverterに配置する必要があります...しかし、私はこのクラスを見つけることができず、(Android)SDKは「暗黙的/明示的または演算子の意味を知りません...

私が達成しようとしていること:

Boolean b = new Boolean(true);
ComparableBoolean cb = new ComparableBoolean(true);

b = cb; //No Invalid class cast exception here :)
cb = b; //and none here.

編集:Googleは私をだましました:暗黙的/明示的はc#の例です:P - Javaに同等のものはありますか?

4

1 に答える 1

0

2 つのメソッドを定義します。

public static ComparableBoolean valueOf ( Boolean b )
{
   if ( b.booleanValue( ) )
   {
     return TRUE;
   }
   return FALSE;
}

public Boolean booleanValue ( )
{
  return booleanObject;
}

Boolean b = cb.booleanValue( );
ComparableBoolean cb = ComparableBoolean.valueOf( b );

これは、Java のプリミティブからオブジェクトへの変換パターンと一致しています。

于 2013-01-23T16:46:23.967 に答える