我可以在字符串连接中使用条件三元运算符吗?

Can I use the conditional ternary operator into a string concatenation?

我有以下疑问:我能否以某种方式将条件三元运算符用于字符串连接?

我正在尝试做这样的事情:

String sql = "insert into TirConsolidatoPolizzaFondo "
                       + "(Polizzaid, FondoID, isQuadraturaOk, ReteVendita,  CodiceConferimento, PercentualeRendimentoDaInizioGestione, "
                       + "DataInizioGestione, PercentualeRendimentoDaInizioAnno, DataInizioAnno, PercentualeRendimentoDaInizioTrimestre, "
                       + "DataInizioTrimestre, DataCalcoloBF, ValoreNavBF, DataRiferimentoNavBF, ControvaloreFinaleBF, ValoreNavPUC, "
                       + "DataRiferimentoNavPUC, ControvaloreFinalePUC, NumeroQuotePUC, DeltaControvaloreFinale, TIMESTAMP, "
                       + "DataValutaUltimaOperazione, MsgPercentualeRendimentoDaInizioAnno, MsgPercentualeRendimentoDaInizioGestione, "
                       + "MsgPercentualeRendimentoDaInizioTrimestre, isTirAnomalo, CodiceLineaBF) "
                       + "values"
                       + "(" + 



                       qsTirPF.getPolizzaid() != null ?  qsTirPF.getPolizzaid() : "null";

这意味着在第一个 String trunk 我想连接由以下评估的值:

qsTirPF.getPolizzaid() != null ?  qsTirPF.getPolizzaid() : "null";

但是 Eclipse 给我签了这个错误:

Type mismatch: cannot convert from Object&Comparable<?>&Serializable to String

为什么?怎么了?我该如何解决这个问题?

首先,您应该将三元条件放在方括号内:

(qsTirPF.getPolizzaid() != null ?  qsTirPF.getPolizzaid() : "null")

此外,您应该验证 qsTirPF.getPolizzaid() 是否返回字符串

您需要括号:

String sql = "insert into TirConsolidatoPolizzaFondo "
    + "(Polizzaid, FondoID, isQuadraturaOk, ReteVendita,  CodiceConferimento, PercentualeRendimentoDaInizioGestione, "
    + "DataInizioGestione, PercentualeRendimentoDaInizioAnno, DataInizioAnno, PercentualeRendimentoDaInizioTrimestre, "
    + "DataInizioTrimestre, DataCalcoloBF, ValoreNavBF, DataRiferimentoNavBF, ControvaloreFinaleBF, ValoreNavPUC, "
    + "DataRiferimentoNavPUC, ControvaloreFinalePUC, NumeroQuotePUC, DeltaControvaloreFinale, TIMESTAMP, "
    + "DataValutaUltimaOperazione, MsgPercentualeRendimentoDaInizioAnno, MsgPercentualeRendimentoDaInizioGestione, "
    + "MsgPercentualeRendimentoDaInizioTrimestre, isTirAnomalo, CodiceLineaBF) "
    + "values"
    + "(" + (qsTirPF.getPolizzaid() != null ?  qsTirPF.getPolizzaid() : "null");

您可以使用括号告诉编译器您想要与条件三元运算符的结果连接:

String sql = "insert into TirConsolidatoPolizzaFondo "
                   + ...
                   + ((getPolizzaid() != null)?  qsTirPF.getPolizzaid() : "null");

这应该有效。

PS :您可以使用 StringBuilder 来构建查询,而不是使用 + 号。效率更高。