switch (productType) { case FUTURE: if (contractId.length() == 6 && !StringUtils.isNumeric(String.valueOf(contractId.toCharArray()[1]))) { symbol = contractId.substring(0, 2) + contractId.substring(3) + PMPConstants.SYMBOL_DOT + exchange; } break; case STOCK: if (ExchangeEnum.HK.equals(ExchangeEnum.ofInner(exchange)) && contractId.length() > 4 && StringUtils.startsWith(contractId, "0")) { symbol = contractId.substring(1) + PMPConstants.SYMBOL_DOT + exchange; } break; default: symbol = contractId + PMPConstants.SYMBOL_DOT + exchange; }为什么不进default
时间: 2024-02-10 17:23:08 浏览: 157
根据您提供的代码片段,可以看出在switch语句中,当`productType`既不是`FUTURE`也不是`STOCK`时,应该进入`default`分支。但是,如果在上述两个`case`中的某个情况下,`symbol`已经被赋值了,那么程序将不会进入`default`分支。
这是因为一旦在`case`分支中的条件满足时,程序会执行相应的代码块,并跳出`switch`语句。所以如果在`FUTURE`或`STOCK`的情况下已经赋值了`symbol`,则不会进入`default`分支。
如果您希望在未匹配到任何`case`时进入`default`分支并设置`symbol`的值,可以将相应的条件检查移到外部,或者使用一个标记来判断是否已经进入了某个`case`分支。
例如,可以尝试以下修改:
```java
boolean isMatched = false; // 添加一个标记来表示是否匹配到合适的条件
switch (productType) {
case FUTURE:
if (contractId.length() == 6 && !StringUtils.isNumeric(String.valueOf(contractId.toCharArray()[1]))) {
symbol = contractId.substring(0, 2) + contractId.substring(3) + PMPConstants.SYMBOL_DOT + exchange;
isMatched = true;
}
break;
case STOCK:
if (ExchangeEnum.HK.equals(ExchangeEnum.ofInner(exchange))
&& contractId.length() > 4 && StringUtils.startsWith(contractId, "0")) {
symbol = contractId.substring(1) + PMPConstants.SYMBOL_DOT + exchange;
isMatched = true;
}
break;
}
if (!isMatched) {
symbol = contractId + PMPConstants.SYMBOL_DOT + exchange;
}
```
这样可以确保如果没有匹配到任何`case`分支时,会进入`default`分支并设置`symbol`的值。
希望这可以回答您的问题。如果您有任何进一步的疑问,请随时提问。
阅读全文