如何覆盖Java对对象的限制

如何覆盖Java对对象的限制,java,object,Java,Object,我得到了一个数据库中对象类String、int、double或boolean的实例。我需要写一个方法,可以比较这个对象与其他东西字符串,int,双精度,或布尔使用二进制运算符,例如,等等。。只有当两个对象的类型相同时,我才会运行此方法。我的方法看起来像 public boolean comparison(Object a, Object b, String operator) { int result = a.compareTo(b); String

我得到了一个数据库中对象类String、int、double或boolean的实例。我需要写一个方法,可以比较这个对象与其他东西字符串,int,双精度,或布尔使用二进制运算符,例如,等等。。只有当两个对象的类型相同时,我才会运行此方法。我的方法看起来像

    public boolean comparison(Object a, Object b, String operator) {
         int result = a.compareTo(b);
         String a2 = a.getClass().getName();
         //followed by if/else if blocks to return true or false 
         //depending on operator and result
    }
我已经设计了if/else if块,以确保没有二进制运算符用于不兼容的类型,例如字符串对象的>=类型。问题是,当我尝试编译时,由于对象类没有compareTo方法,我得到了一个找不到符号错误。如果这是python,实际上不会有任何问题,因为我永远不会在没有compareTo方法的比较函数中放入任何内容。然而,由于java的格式,我不得不将输入声明为“Object”,因为我无法明确指出在给定时刻必须比较哪种类型的对象

是否有某种方法可以覆盖Java的限制并强制它相信我,对象a将始终有一个compareTo方法?因为现在,我似乎必须将对象向下转换为字符串、整数、double或boolean,然后为每个数据类型编写4个不同的新比较函数。

因为在接口中声明了compareTo方法,的使用可以约束a和b参数,以便只接受实现接口本身的对象。 可以检查运算符参数以影响布尔结果。 如果愿意,使用枚举值有助于避免字符串不匹配。 为简洁起见,下面的代码不考虑空值


Java方法是首先使用instanceof运算符,然后将其转换为适当的类:

if (a instanceof String && b instanceof String) {
  String aAsString = (String) a;
  int comparisonResult = a.compareTo(b);
compareTo在ab时给出正结果。所以,只有int result告诉您足够多的信息来决定潜在的比较操作应该产生什么结果。数值类型为int/Integer。。。有相似的方法

当然,这只有在您的假设确实正确并且对象确实是字符串或布尔值时才有效。请注意,布尔和布尔是两种不同的类型

上面的答案概括了我想做的事情。我说的时候代码编译成功了

int result;
if (a instanceof Comparable && b instanceof Comparable) {
   result = ((Comparable) a).compareTo((Comparable) b);
}

我还没有测试过它,但Fantagirocco的解决方案似乎也能工作。

我发布了自己的解决方案。还有两天我才能接受。那我就接受了。
int result;
if (a instanceof Comparable && b instanceof Comparable) {
   result = ((Comparable) a).compareTo((Comparable) b);
}