J'ai la classe abstraite followin ...Java génériques, types incompatibles erreur (avec l'héritage)
public abstract class IRepository<T> {
public T getEntityById(int idEntity){
try{
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx = session.beginTransaction();
T result = (T) session.createQuery(getByIdQuery() + idEntity).uniqueResult();
tx.commit();
if (result != null){
System.out.println("Fetched " + result.toString());
return result;
}
else return null;
}
catch (Exception e){
// TO DO : logging
handleException(e);
return null;
}
}
Et une autre classe, qui hérite de celui-ci ...
public class ProductRepository extends IRepository<Product> {
public ProductRepository(){
}
}
Quand je faire l'appel suivant d'une classe principale, je reçois une erreur ...
ProductRepository prodRep = new ProductRepository();
Product result = prodRep.getEntityById(111);
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - incompatible types
required: gestor.model.Product
found: java.lang.Object
Ma question est .. Pourquoi est-ce qui se passe? mon getEntityById ne retourne-t-il pas quelque chose du type T, qui dans ce cas devrait être des produits?
Je travaille dans NetBeans et aucune erreur n'est affichée dans l'heure de compilation.
Nous vous remercions de l'aide =)
Qu'advient-il si vous essayez 'IRepository prodRep = new ProductRepository()'? –
wchargin
Pourriez-vous essayer 'Object result = prodRep.getEntityById (111); System.out.println (résultat); Produit produit = (produit) résultat; – wchargin