Perché il compilatore è in grado di determinare il parametro di tipo generico per un incarico , ma non per l'operatore ternario (?
)?Java non riesce a dedurre il parametro di tipo generico quando usa l'operatore ternario (`?`)?
Ho una domanda per quanto riguarda il compilatore in grado di dedurre il parametro generico tipo in caso di assegnazione "diretta", ma non riuscendo nel caso del operatore ternario (?
). I miei esempi utilizzano la classe Optional
di Guava, per rendere il mio punto, ma Penso che il problema di fondo sia generico e non limitato a Optional
.
Optional
ha una funzione generica absent()
:
public static <T> Optional<T> absent();
e posso assegnare un Optional<T>
a un Optional<Double>
:
// no compiler error
final Optional<Double> o1 = Optional.absent();
Come funziona il rendersi conto del compilatore, che T
dovrebbe essere Double
in questo caso. Perché quando si utilizza l'operatore ternario (?
), ho bisogno di dire al compilatore specificamente a noi Integer
come parametro generico
// Type mismatch: cannot convert from Optional<capture#1-of ? extends Object> to Optional<Integer>
final Optional<Integer> o2 = true
? Optional.of(42)
: Optional.<Integer>absent();
altrimenti il seguente errore
Tipo non corrispondente: non può convertire da
Optional<capture#1-of ? extends Object>
aOptional<Integer>
Perché c'è una differenza tra un "diretto" e l'utilizzo di l'operatore ternario ? O c'è qualcos'altro che mi manca?
qual è il tipo di ritorno del metodo 'of'? – sanbhat
Uguale a 'absent()': 'statico pubblico facoltativo di (riferimento T);' –
Quale versione di javac stai compilando? – Vincent