2013-05-11 5 views
3

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 =)

+1

Qu'advient-il si vous essayez 'IRepository prodRep = new ProductRepository()'? – wchargin

+0

Pourriez-vous essayer 'Object result = prodRep.getEntityById (111); System.out.println (résultat); Produit produit = (produit) résultat; – wchargin

Répondre

3

Je soupçonne une erreur dans vos importations ou configuration. Dans Eclipse, vous pouvez "nettoyer" un projet pour purger tous les fichiers binaires et les reconstruire; essayez l'équivalent dans Netbeans.

Le code suivant fonctionne bien pour moi, et il semble être une simplification directe de votre problème:

// Test.java 
public abstract class Test<T> { 
    public T get(int i) { 
    return null; 
    } 
    public static void main(String[] args) { 
    StringTest st = new StringTest(); 
    String s = st.get(0); 
    System.out.println(s); // prints: null 
    } 
} 
class StringTest extends Test<String> { 
    public StringTest() { } 
} 
+0

J'ai perdu beaucoup de temps sur ce qui semblait être une solution vraiment simple une fois que je l'ai su .. Merci beaucoup Chargin, travaillé comme un charme .. –

+0

Qu'est-ce qui a fini par être le problème? – wchargin

+0

Ce que vous avez suggéré ... a dû faire un nettoyage et reconstruire au projet :) –

Questions connexes