在我使用很多类的项目中,这些类是通用的并使用类型定义<? 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 中是否有等价物?