有如下的一個接口,叫做:GenericDao,有幾點不理解:
1、雖然知道E,K,V都是泛型,但是一直不太理解有什麼用,比如:>這段代碼有什麼用,實現什麼功能?如果不寫會有什麼影響?
2、為什麼在類的定義中還可以extends,一般不都是 class A1 extends A,這麼寫麼?為什麼可以class A1
package com.patsnap.common.bean;
import com.patsnap.common.entity.DBVersionEntity;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* Author: shenyineng
* Date: 9/25/15.
*/
public interface GenericDao<K extends Serializable, E extends DBVersionEntity<K>> {
/**
* Get target entity by id
*
* @param id specified id
* @return specified entity
*/
E get(@Valid @NotNull K id);
/**
* Save a entity
*
* @param entity specified entity
*/
void save(@Valid @NotNull E entity);
/**
* Delete a specified entity
*
* @param entity specified entity
*/
void delete(E entity);
/**
* Delete a target entity by its id
*
* @param id specified id
*/
void delete(@Valid @NotNull K id);
}
希望誰能幫忙解答一下,多謝。
GenericDao是一個接口,並且是一個泛型接口,因為其定義時,在GenericDao後面有<>。<>中的K、E表示某種類型,但是只有到使用的時候才知道是什麼類型。
如果<>中僅僅是,那麼K、E可以是任何類型,但是實際上有時我們只希望K、E是一些有限制的類,比如某個類的子類等。
問題中但GenericDao泛型接口定義就是對K、E有限制,要求K是Serializable類的任何子類,E是DBVersionEntity類的任何子類。
如果不這麼寫,別人在使用GenericDao接口的時候,可以將任何類型用到這個接口的實現中,造成代碼出錯。