String key = offset == -1 ? keyStroke : keyStroke.substring( offset + 1 );
我在网上发现了一些代码的例子,它包含了我不理解的这一行。
这是key binding example中的一段代码。具体来说,“KeyboardAnimation.java”第37行。
这可能是一个愚蠢的问题,但我不知道这里发生了什么。我可以花很长时间做研究,但我觉得这可以很容易地被某人解释(我可以详细了解我的推理,但它不是重点)。
我知道它将key
类型的变量String
设置为某种东西。 keyStroke是一个字符串,其格式与按键的方式相同:
解析字符串并返回KeyStroke。该字符串必须具有以下>语法:
*(|)修饰符:= shift |控制| ctrl | meta | alt |同时按下AltGraph
typedID:= typed
typedKey:=长度为1的字符串,给出Unicode字符。
pressedReleasedID:=(按下|已释放)键
key:= KeyEvent密钥代码名称,即“VK _”后的名称。
如果未指定键入,按下或释放,则按下。以下是一些示例:
"INSERT" => getKeyStroke(KeyEvent.VK_INSERT, 0); "control DELETE" => getKeyStroke(KeyEvent.VK_DELETE, InputEvent.CTRL_MASK); "alt shift X" => getKeyStroke(KeyEvent.VK_X, InputEvent.ALT_MASK | InputEvent.SHIFT_MASK); "alt shift released X" => getKeyStroke(KeyEvent.VK_X, InputEvent.ALT_MASK | InputEvent.SHIFT_MASK, true); "typed a" => getKeyStroke('a');
(来自:KeyStroke javax.swing.KeyStroke.getKeyStroke(String s))
现在,进入我实际上不知道的东西:为什么它似乎有一个布尔运算符?问号有什么作用?结肠做了什么?
我觉得这是我之前应该学到的东西,但却没有......
答案 0 :(得分:1)
String key = offset == -1 ? keyStroke : keyStroke.substring( offset + 1);
这是一个变量声明和初始化。它定义了一个变量:
String key
并立即初始化:
String key = ...;
现在,用于初始化字符串的右侧值是什么?它是一个三元语句,表达形式:
condition ? valueIfTrue : valueIfFalse
如果布尔表达式valueIfTrue
为真,则此表达式的值为condition
,如果布尔表达式valueIfFalse
为假,则为condition
。
在您的情况下,如果keyStroke
为真,则使用offset == -1
的值初始化键变量,如果keyStroke.substring( offset + 1 )
为假,则使用值offset == -1
初始化。
整件事可以改写为
String key;
if (offset == -1) {
key = keyStroke;
}
else {
key = keyStroke.substring(offset + 1);
}