2009-12-30 44 views
1
@Entity 
    @Table(name = "your_entity") 
    public class YourEntityClass implements IEntity<Long> { 

     @Id 
     @SequenceGenerator(name = "gen_test_entity2_id", sequenceName = "test_entity2_id_seq", allocationSize = 10) 
     @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "gen_test_entity2_id") 
     private Long id; 

     @Column(name = "name", nullable = false, length = 64) 
     private String name; 

     /* 
     * Create constructors, getters, setters, isEquals, hashcode, etc. 
     */ 
    } 

public interface IEntity<I extends Serializable> extends Serializable { 

    /** 
    * Property which represents id. 
    */ 
    String P_ID = "id"; 

    /** 
    * Get primary key. 
    * 
    * @return primary key 
    */ 
    I getId(); 

    /** 
    * Set primary key. 
    * 
    * @param id primary key 
    */ 
    void setId(I id); 
} 

上面的代碼,我的問題是,爲什麼YourEntityClass需要通過LongIEntity<Long>?爲什麼不能像IEntity<String>?是因爲id的類型是Long,並且id的獲取者必須返回我們提供給IEntity的同一類型?瞭解泛型

回答

4

YourEntityClass<Long>置於IEntity之內。任何類型的實施Serializable可以去那裏。

當您選擇I的類型後,您的getId()方法必須返回相同類型。

例如,您可能有另一個類實現IEntity<String>getId()在這種情況下將不得不返回String

+0

+1給出第二個例子。 – 2009-12-30 03:12:55

+0

非常清楚地理解=) – cometta 2009-12-30 03:25:04

0

YourEntityClass正在實現一個通用接口,它正在指定通用接口的特定類型。它有一個使用特定類型(Long)的方法,因爲這是實現該接口的要求。