Java中的泛型

cnblogs 2024-09-16 16:09:00 阅读 72

泛型的使用

    <li>泛型是一种类型参数。将数据的类型,当做一个参数。

1. 泛型的作用

  • 在创建集合对象的时候,限定集合存储元素的类型
  • 在编译的时候,就进行类型检查;

2. 泛型的使用规则

  • 如果不指定泛型,默认是Object类型
  • 泛型擦除:泛型应用于代码编译期,程序运行的后,泛型就被擦除了。即运行期,泛型被擦除。
  • 同时指定多个泛型<E1,E2,E3,....>
  • 静态方法中,不能使用泛型类或泛型接口。
  • 泛型方法,可以是静态的。 因为方法被调用时,才确定泛型参数的类型
  • 泛型数组:<code>E[] elements = (E[])new Object[capacity];li>

3. 泛型的分类

  • 泛型类

    类中的某个属性,在定义的时候,不能确定是什么类型,可以使用泛型表示该属性的类型

  • 泛型接口

    接口中的方法参数类型 或 返回值类型,不确定的时候,使用泛型替代

  • 泛型方法

    类上面没有泛型,但是方法上指定了泛型。一般用于工具类,不能实例化对象

    方法的参数类型或返回值类型,不能确定的时候,使用泛型代替


4. 通配符的使用

通配符用于指定泛型的范围(上限和下限)

    <li>

    ? 任意类型

    List<?>:只能写入null值。

  • <? super 类型>:当前类型或当前类型的父类型

  • <? extends 类型>:当前类型或当前类型的子类


5. 应用实例

泛型接口的使用

<code>//泛型接口

public interface MyCollection<T> {

void add(T t);

}

//情况1:子类定义是,直接指定泛型的具体类型

public class MyCollectionImpl01 implements MyCollection<Integer> {

@Override

public void add(Integer integer) {

}

}

//情况2:子类是一个泛型类

public class MyCollectionImpl02<T> implements MyCollection<T> {

@Override

public void add(T t) {

}

}

泛型方法的使用

/**

* 打印不同类型的集合

*/

public <E> void printAll(E e){

if(e instanceof Collection){

((Collection) e).forEach(System.out::println);

}else if( e instanceof Map){

Set set = ((Map) e).entrySet();

Iterator iterator = set.iterator();

while(iterator.hasNext()){

Map.Entry next = (Map.Entry) iterator.next();

System.out.println(next.getKey()+" "+next.getValue());

}

}else{

System.out.println(e);

}

}

查询所有的记录

引入依赖

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.1.3</version>

</dependency>

JavaBean实体类

public class Book{

private Integer id;

private String bookName;

private String author;

private Double price;

JDBC 工具类

/**

* 工具类:获取MySQL数据库连接

*/

public class JDBCUtil {

private static final String DRIVER = "com.mysql.jdbc.Driver";

//数据库连接参数

private static final String URL = "jdbc:mysql://localhost/db_day525";

private static final String NAME = "root";

private static final String PASSWORD = "admin";

//注册驱动(仅注册1次)

static {

try {

Class.forName(DRIVER);

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

//数据库连接

public static Connection getConnection() {

try {

return DriverManager.getConnection(URL, NAME, PASSWORD);

} catch (SQLException e) {

e.printStackTrace();

}

return null;

}

//释放资源

public static void close(Connection conn, Statement stmt) {

close(conn, stmt, null);//方法重用

}

public static void close(Connection conn, Statement stmt, ResultSet rs) {

try {

if (rs != null) {

rs.close();

}

} catch (SQLException throwables) {

throwables.printStackTrace();

}

try {

if (stmt != null) {

stmt.close();

}

} catch (SQLException throwables) {

throwables.printStackTrace();

}

try {

if (conn != null) {

conn.close();

}

} catch (SQLException throwables) {

throwables.printStackTrace();

}

}

}

Dao层

泛型接口

<code>/**

* Dao层泛型接口:通用的CURD方法

*/

public interface Dao<T> {

/**

* 添加一条记录

* @param t

*/

void insert(T t);

/**

* 删除一条记录

* @param t

*/

void delete(T t);

/**

*查询所有数据

*/

List<T> selectAll() throws SQLException;

/**

* 查询一个数据:根据id

*/

T select(int index);

/**

* 修改一条记录:根据id

*/

void update(int index, T t);

}

实现类

<code>public class BookDaoImpl implements Dao<Book> {

Connection conn = JDBCUtil.getConnection();

@Override

public List<Book> selectAll() throws SQLException {

List<Book> list = new ArrayList<>();

String sql = "select book_id as id,book_name as bookName,author,price from t_book";

PreparedStatement preStatement = conn.prepareStatement(sql);

ResultSet resultSet = preStatement.executeQuery();

while(resultSet.next()){

int bookId = resultSet.getInt(1);

String bookName = resultSet.getString(2);

String author = resultSet.getString(3);

Double price = resultSet.getDouble(4);

list.add(new Book(bookId,bookName,author,price));

}

return list;

}

@Override

public void insert(Book book) {}

@Override

public void delete(Book book) {}

@Override

public Book select(int index) {return null;}

@Override

public void update(int index, Book book) {}

}

测试

public static void main(String[] args) throws SQLException {

Dao dao = new BookDaoImpl();

List list = dao.selectAll();

list.forEach(System.out::print);

}




声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。