È pratica accettabile mettere i generici su un'interfaccia quando l'implementazione non sarà generica? Diciamo che il mio progetto avrà molte classi che leggono i dati dal database. Potrei creare un'interfaccia generica come:
public interface DataRetriever<T, R>{
R retrieveData(T criteria);
}
public class UserDataRetriever implements DataRetriever<UserCriteria, User>{
@Override
public User retrieveData(UserCriteria criteria) {
...
}
}
Oppure un altro esempio potrebbe essere:
public interface DataRetriever2<R>{
R retrieveData();
}
public class UserDataRetriever2 implements DataRetriever2<User>{
@Override
public User retrieveData() {
...
}
}
Con l'uso di generici sulle interfacce, sembra che io possa ricavare molta più riutilizzabilità dalle mie interfacce e non ho bisogno di un'interfaccia per classe di recupero dei dati. Tuttavia, temo che la documentazione per la mia interfaccia sia costretta a essere vaga. Le persone devono inoltre rispettare il numero di parametri sul metodo retrieveData in modo che possano creare un nuovo oggetto Pojo per lo scenario 1 o essere obbligati a mettere tutto nel costruttore nello scenario 2. Riflessioni sull'utilizzo di generici qui quando l'implementazione non sarà usa i farmaci generici?