观察:

Java有一个逻辑与运算符。 Java有一个逻辑或运算符。 Java有一个逻辑NOT运算符。

问题:

sun表示,Java没有逻辑XOR运算符。我想定义一个。

方法定义:

作为一种方法,简单定义如下:

public static boolean logicalXOR(boolean x, boolean y) {
    return ( ( x || y ) && ! ( x && y ) );
}

方法调用:

这个方法的调用方式如下:

boolean myVal = logicalXOR(x, y);

操作符用法:

我更希望有一个操作符,使用如下:

boolean myVal = x ^^ y;

问题:

我找不到任何关于如何在Java中定义新操作符的内容。我该从哪里开始呢?


当前回答

Java中唯一的操作符重载是字符串上的+ (JLS 15.18.1 String concatation operator +)。

社区多年来一直被分成三部分,三分之一不想要它,三分之一想要它,三分之一不在乎。

你可以使用unicode来创建方法名。如果你想用一个符号,你可以用myVal = x.$(y);其中$是符号,x不是原语…但这在某些编辑器中是很危险的,并且是有限制的,因为你不能在原语中这样做。

其他回答

可以实现使用流API在java 8及以上

public static boolean logicalXOR(boolean x, boolean y) {  // can modify to take [] or list of bools
    return Stream.of(x, y)  // modify as per method params
        .filter(bool -> bool)
        .count() == 1;
}

这是一个var arg XOR方法的java…

public static boolean XOR(boolean... args) {
  boolean r = false;
  for (boolean b : args) {
    r = r ^ b;
  }
  return r;
}

享受

Java中唯一的操作符重载是字符串上的+ (JLS 15.18.1 String concatation operator +)。

社区多年来一直被分成三部分,三分之一不想要它,三分之一想要它,三分之一不在乎。

你可以使用unicode来创建方法名。如果你想用一个符号,你可以用myVal = x.$(y);其中$是符号,x不是原语…但这在某些编辑器中是很危险的,并且是有限制的,因为你不能在原语中这样做。

Java有一个逻辑与运算符。 Java有一个逻辑或运算符。

错了。

Java

两个逻辑与运算符:正常AND为&,短路AND为&&,和 两个逻辑或运算符:正常或为|,短路或为||。

XOR仅作为^存在,因为短路计算是不可能的。

你需要切换到Scala来实现你自己的操作符

管的例子