Estou usando Java 8 e estou enfrentando um erro estranho.
O compilador dá o seguinte erro:
erro: a referência a [método] é ambígua
Aqui está meu código
StringBuilder sb = new StringBuilder();
Stack<Integer> st = new Stack<>();
st.push(123);
sb.append(st.size() > 0 ? st.pop() : 0);
Depois de alguma pesquisa, descobri que Java converte o operador ternário ? Integer:int
para int
. Além disso, a sobrecarga de resolução prefere append(int i)
( append(Object o)
unboxing).
Pelo que entendi, o código não deve causar nenhum erro.
- tipo de operador ternário deve ser
int
, nãoInteger
- Mesmo que o resultado seja
Integer
,append(int i)
deve ser invocado devido à sobrecarga de resolução
Portanto, não há razão para causar ambiguidade
Isso é estranho e só ocorre com Java 8 (não 11, 17 - eu tentei)
E uma coisa ainda mais estranha é que esse código funciona
sb.append(st.size() <= 0 ? 0 : st.pop());
Alguém pode explicar o porquê? Ou me diga se há algo que eu perdi
Tentei encontrar problemas em como o operador ternário e a resolução de sobrecarga funcionam, mas, conforme investiguei, não há razão para causar erro.