2011-10-04 38 views
0

當前我試圖執行a typed generic DAO鍵入的通用DAO和實體

我都不去編譯任何東西,因爲NetBeans的抱怨UserDAOHibernate

接口這裏有望
類型參數的用戶不是類型可變實體

我範圍內害怕我如何使用繼承/接口存在一些明顯的錯誤,因爲我對Java很陌生。

這裏的一些精簡代碼

public interface GenericEntity<ID extends Serializable> { 
    public abstract ID getId(); 
    public abstract void setId(final ID id); 
} 

public abstract class LongEntity implements GenericEntity<Long> { 
    protected Long id; 
    public Long getId(); 
    public void setId(final Long id); 
} 

public class User extends LongEntity implements Serializable { 
    private String name; 
    private String password; 
    private Customer customer; 
} 

public interface GenericDAO<ENTITY extends GenericEntity<ID>, ID extends Serializable> { 
    public abstract ENTITY findById(ID id); 
    public abstract List<ENTITY> findAll(); 
    public abstract ENTITY makePersistent(ENTITY entity); 
    public abstract void makeTransient(ENTITY entity); 
} 

public abstract class GenericHibernateDAO<ENTITY extends GenericEntity<ID>, ID extends Serializable> 
     implements GenericDAO<ENTITY, ID> { 
} 

public class UserDAOHibernate implements GenericHibernateDAO<User, LongEntity> { 
} 

難道LongEntity應該extend GenericEntity<Long>?如果是這樣,我將如何用Java的單一級別或繼承來做到這一點?

這種分層方法是一個不好的例子嗎?我所有的實體都需要一個id,這個實現很容易在以後用不同的id類型重用,所以我想我可以使用它。

+1

旁註:你沒有申報的接口方法的抽象(也沒有公開) - 它們隱含都是公共的和抽象的反正。 :) – Thomas

+0

@Thomas謝謝。保存我另外幾個按鍵:) – user967058

回答

1

這個錯誤來自這裏:

public class UserDAOHibernate implements GenericHibernateDAO<User, LongEntity> { 
} 

你指定GenericHibernateDAOID參數類型由<ID extends Serializable>界。

LongEntity延伸GenericEntity,因此,爲什麼你有一個類型不匹配。

另外,GenericHibernateDAO是一個抽象類(而不是接口),所以你需要extends而不是implements

正確的解決方法應該是:

public class UserDAOHibernate extends GenericHibernateDAO<User, Long> { 
} 
+0

謝謝!還有一個關於implements與extends的錯誤:'public class UserDAOHibernate extends GenericHibernateDAO ' – user967058

+0

@ user967058,我看到了,所以我已經更新了。謝謝。 –