0

在我使用很多类的项目中,这些类是通用的并使用类型定义<? extends Comparable>。由于Boolean不可比较,但我也想将这些类与布尔值一起使用,我创建了自己的ComparableBoolean类,如下所示:

(我为布尔写了一个类似的代理类,因为它是最终的)

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.

编辑:谷歌欺骗了我的:隐式/显式是来自 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 回答