【问题标题】:comparison operator objects in javajava中的比较运算符对象
【发布时间】:2012-03-12 17:28:59
【问题描述】:

这些比较运算符(=、>、!=)在 Java 中是否有任何对象表示?

例如用例:

void filterHotel( Object operator, float rating ) {

    String query = "SELECT hotel.name from hotel where hotel.rating " + 
operator.toString() + rating;    
    // execute query
}

【问题讨论】:

  • 自己写吧,5分钟吧..
  • 为什么不只是一个String
  • Java 不是 c++。您不能覆盖 java 中的运算符。
  • @paislee:其实我很佩服那些总是检查这个小东西是否已经存在的人。否则,我们最终会出现重复和难以移植的代码。
  • @TomaszNurkiewicz:是的,我问同样的原因:)。发生了很多事情,所以轮子很有可能已经被发明出来了!

标签: java operators operator-keyword


【解决方案1】:

。不过写起来容易,可以考虑用enum和自定义方法:

public enum Operator {
    EQUAL("=="),
    NOT_EQUAL("<>"),
    GREATER_THAN(">"),
    GREATER_THAN_OR_EQUAL(">="),
    LESS_THAN("<"),
    LESS_THAN_OR_EQUAL("<=");

    private final String representation;

    private Operator(String representation) {
        this.representation = representation;
    }

    public String getRepresentation() {
        return representation;
    }
}

通过例如Operator.LESS_THAN 并使用 operator.getRepresentation() 提取实际运算符。

还要确保用户不能用任意字符串代替operator 以避免

【讨论】:

    【解决方案2】:

    没有内置任何东西,但您可以定义一个 enum 来解决问题:

    public enum ComparisonOperator {
        LT("<"), LE("<="), EQ("=="), NE("<>"), GE(">="), GT(">");
    
        ComparisonOperator(String symbol) { this.symbol = symbol; }
        private final String symbol;
        public String toSymbol() { return symbol; }
    }
    

    然后:

    void filterHotel(ComparisonOperator operator, float rating) {
    
        String query = "SELECT hotel.name from hotel where hotel.rating " + 
            operator.toSymbol() + rating;    
        // execute query
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-12
      • 1970-01-01
      • 2013-03-07
      相关资源
      最近更新 更多