Ho un'interfaccia che verrà implementata da diverse classi diverse, ciascuna con tipi e tipi di ritorno diversi. Il tipo di ritorno può essere dedotto dal tipo generico del metodo, ma ho problemi ad implementarlo.Come restituire un tipo concreto quando si implementa un'interfaccia generica
L'interfaccia assomiglia a questo momento:
public interface TransformUtilsBase<T> {
Class<?> transformToNhin(T request, BrokerContext brokerContext);
}
voglio la classe Impl per assomigliare:
public class TransformUtilsXCPD implements TransformUtilsBase<foo> {
bar transformToNhin(foo request, BrokerContext brokerContext) {
code here
}
Nel impl ho so quale il tipo di ritorno dovrebbe essere. A livello di interfaccia non c'è modo di dirlo.
Potrei semplicemente rinunciare a un'interfaccia tutti insieme, e creare solo più classi con gli stessi nomi di metodo, ma volevo formalizzarlo, dato che si stanno tutti abituando allo stesso scopo. Solo i tipi sono diversi.
Oppure potevo semplicemente avere una grande classe di metodi statici dal momento che sono operazioni util, ma stava diventando ingombrante gestire una classe con così tanti metodi con lo stesso nome e tutti i metodi helper necessari (di nuovo tutti con il stesso nome).
L'implementazione di un'interfaccia sembra l'opzione migliore per formalizzare la funzionalità, anche se non sono in grado di eseguire metodi statici. Non riesco proprio a capire come gestire i tipi di ritorno.
modifica: espansione su interfaccia per mostrare l'esempio completo per evitare ulteriore confusione. Interface
public interface TransformUtilsBase<T, U> {
Class<?> transformToNhin(T request, BrokerContext brokerContext);
Class<?> transformToXca(U request, BrokerContext brokerContext);
}
Impl
public class TransformUtilsXCPD implements TransformUtilsBase<Foo, Bar> {
Baz transformToNhin(Foo request, BrokerContext brokerContext) { code here }
Biz transformToXca(Bar request, BrokerContext brokerContext) { code here }
}
Stai cercando di restituire la classe reale Baz, o un'istanza di Baz? La tua modifica implica che potrebbe essere il secondo. – Alex
Buon punto. Sto cercando di restituire un'istanza specifica della classe Baz, creata durante il processo di trasformazione. La notazione con caratteri jolly è il modo migliore in cui ho saputo esprimere la mia intenzione di fornire generici solo per le variabili del metodo, che il tipo di ritorno può essere determinato da. –