Sto utilizzando Eclipse Luna Service Release 2 (4.4.2), Java 8 u51.Costruttore funzionale Java 8 dall'oggetto modello
Sto provando a creare un metodo che creerà istanze di un oggetto passato in base a un altro parametro di metodo. Il prototipo è semplificata al
public <T> T test(Object param, T instance) {
Constructor<?> constructor = instance.getClass().getConstructors()[0]; // I actually choose a proper constructor
// eclipse reports "Unhandled exception type InvocationTargetException"
Function<Object, Object> createFun = constructor::newInstance;
T result = (T) createFun.apply(param);
return result;
}
on line con Function
dichiarazione rapporti eclissi Unhandled exception type InvocationTargetException
errore del compilatore. Ho bisogno dello Function
per utilizzarlo successivamente in un flusso.
Ho provato ad aggiungere vari blocchi try/catch, genera dichiarazioni, ma niente risolve questo errore del compilatore.
Come utilizzare questo codice?
Cosa pensi è il vantaggio del 'deviazione Function' oltre semplicemente chiamando' newInstance' sul 'Constructor'? – Holger
@Holger Stavo usando 'newInstance' su' Constructor' in-stream e ha prodotto lo stesso messaggio, quindi ho creato un SSCE come questo. La deviazione della funzione è effettivamente necessaria per mantenere una catena 'stream()' relativamente leggibile. – Dariusz
Vedo. Quindi è stato un po 'troppo semplificato per quanto riguarda il caso d'uso e un'espressione lambda come suggerito da assylias dovrebbe funzionare. Ma quello che mi piacerebbe sapere ora, è se c'è davvero un severo requisito riguardo al tipo risultante che è il tipo esatto di 'instance' (che potrebbe essere una sottoclasse di' T'), in altre parole se ricorrere a Reflection è davvero necessario ... – Holger