Java基础 - 泛型和集合
泛型:–JDK5以后, Java引入了“参数化类型(parameterized type)”的概念, 该概念也称之为泛型(Generic)。所谓泛型就是允许在定义类、接口或方法时使用类型形参,该类型形参将在声明变量、创建对象或者调用方法时动态指定(即传入实际的类型参数,可称为类型实参)
优点
–泛型的出现简化了代码,提高了程序的健壮性。
ex:利用泛型去简化代码:
userinfo类:
package core;
public class UserInfo {
private String id;
private String username;
private String password;
public String getId() {
return this.id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public void setId(String id) {
this.id = id;
}
}
DBLinks类:
public class DBLinks<E>{
static {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取连接
*
* @author 艾贻彪
*/
private Connection getConnection() {
Connection connection=null;
try {
connection = DriverManager.getConnection(PropertiesUtil.getValue("url"), PropertiesUtil.getValue("user_name"), PropertiesUtil.getValue("password"));
return connection;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/**
* 释放资源
*
* @author 艾贻彪
*/
private void close(Connection connection,Statement statement,ResultSet rs) {
if (rs!= null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (statement!= null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection!=null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public <E> E select(String sql,IRowMapper<E> rowMapper,Object...values) {
Connection connection =getConnection();
PreparedStatement preparedStatement = null;
ResultSet rs = null;
try {
preparedStatement =connection.prepareStatement(sql);
for (int i = 1; i <= values.length; i++) {
preparedStatement.setObject(i, values[i-1]);
}
rs = preparedStatement.executeQuery();
return rowMapper.dealResult(rs);
} catch (SQLException e) {
e.printStackTrace();
}finally {
close(connection, preparedStatement, rs);
}
return null;
}
}
IRowmapper接口
package com.xt.util.db;
import java.sql.ResultSet;
public interface IRowMapper<E> {
E dealResult(ResultSet rs);
}
Test类:将数据库里的信息存入一个List集合里面
package core;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.xt.util.db.DBLinks;
import com.xt.util.db.IRowMapper;
public class Test {
public static void main(String[] args) {
String sql = "select * from user_info";
List<UserInfo> lists = new DBLinks<List<UserInfo>>().select(sql,new IRowMapper<List<UserInfo>>(){
@Override
public List<UserInfo> dealResult(ResultSet rs) {
List<UserInfo> list = new ArrayList<UserInfo>();
try {
while(rs.next()) {
UserInfo userinfo = new UserInfo();
userinfo.setId(rs.getString("id"));
userinfo.setUsername(rs.getString("username"));
userinfo.setPassword((rs.getString("password")));
list.add(userinfo);
}
return list;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
});
for (UserInfo userInfo : lists) {
System.out.println(userInfo.getId()+":"+userInfo.getUsername()+":"+userInfo.getPassword());
}
}
}