定制转换器//来自或来自?

时间:2013-01-23 16:40:00

标签: java casting converter

在我使用大量类的项目中,这是通用的并使用类型定义<? 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”转换为“布尔”,反之亦然。

现在我想知道是否有可能定义自定义“演员阵容”。

我的调查显示,可能有可能定义自己的演员表,例如(在我的案例中):

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欺骗我的:implicit / explicit是来自c#的例子:P - Java中是否存在等价物?

1 个答案:

答案 0 :(得分: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中的原始到对象转换模式一致