有如下的一个接口,叫做: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接口的时候,可以将任何类型用到这个接口的实现中,造成代码出错。
package cn.itcast_08;
public class SellTicket implements Runnable {
// 定义100张票
private int tickets = 100;
// @Override
// public void run() {
// while (true) {
// // t1,t2,t3三个线程
// // 这一次的ti......
答案就在这里:Java基础----一个有问题的多线程程序
----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。
泛型的主要作用是校验数据的安全性,很多java开发者认为泛型主要是起到通配符的作用,这一点上很多人有误解的,建议去深入了解java泛型