在我使用大量类的项目中,这是通用的并使用类型定义<? 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中是否存在等价物?
答案 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中的原始到对象转换模式一致