//在没有使用泛型时:
//1、不能保证存储数据类型的安全
//2、数据需要强转,可能出现ClassCastExcepetion异常
@Test
public void testNoGeneric(){
List list = new ArrayList();
list.add(88);
list.add(90);
list.add(99);
list.add("AA");//不能保证存储数据类型安全
for(int i=0;i
java 的泛型机制就是解决这么样的问题,通过使用泛型:
1.保证数据存储类型的安全,就是通过指定泛型的类型,使得在存储数据时,只能存储先前指定类型
2.避免了数据类型的转换,也就避免了异常
代码:
//使用泛型,保证数据存储的类型安全
//同时,避免了强制类型转换
@Test
public void testGeneric1(){
//在指定泛型之后,该泛型类的所有有关泛型的方法或返回类型,都变成了指定的泛型类型
List list =
new ArrayList();//实现类的泛型可以不再指定,只需一个<>即可
list.add(88);
list.add(90);
list.add(99);
//list.add("AA");//编译时就会报错,保证数据存储类型的安全
//List容器的遍历方法
Iterator it = list.iterator();
while(it.hasNext()){
Integer score = it.next();
System.out.println(score);
}
//或者
// for(Integer i:list){
// System.out.println(i);
// }
}
2、在集合中使用泛型:
其实通过指定泛型,泛型类的所有与泛型相关的方法都自动变成了指定的类型
集合List:见“为什么使用泛型”一节
集合Map:
@Test
public void test3(){
Map map =
new HashMap();//OR new HashMap<>()即可
map.put("AA", 78);
map.put("BB", 88);
map.put("CC", 99);
Set> set = map.entrySet();
for(Entry o:set){
System.out.println(o);
}
}
3、自定义泛型类、泛型接口和泛型方法
自定义泛型类
通过添加在类型名后边:class ClassName
自定义泛型类Order,
代码:
public class Order {
private String orderName;
private int orderId;
private T t;
public List list = new ArrayList<>();
public void add(){
list.add(t);
}
public String getOrderName() {
return orderName;
}
public void setOrderName(String orderName) {
this.orderName = orderName;
}
public int getOrderId() {
return orderId;
}
public void setOrderId(int orderId) {
this.orderId = orderId;
}
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
@Override
public String toString() {
return "Order [orderName=" + orderName + ", orderId=" + orderId + ", t=" + t + "]";
}
//泛型方法,泛型方法的类型与泛型类无关
public E getE(E e){
return e;
}
//泛型方法,实现数组到集合的复制
public List fromArrayToList(E[] arr, List list){
for(E e:arr){//数组也可以这样遍历
list.add(e);
}
return list;
}
}
Order的使用,
代码:
//自定义泛型类的使用
@Test
public void test4(){
Order order = new Order();
order.setT(true);
Boolean b = order.getT();
System.out.println(b);
order.add();
List list = order.list;
System.out.println(list);
}
//泛型方法,泛型方法的类型与泛型类无关
public E getE(E e){
return e;
}
//泛型方法,实现数组到集合的复制
public List fromArrayToList(E[] arr, List list){
for(E e:arr){//数组也可以这样遍历
list.add(e);
}
return list;
}
泛型方法的使用:(其实通过参数,便指定类泛型方法的泛型类型)
代码:
//泛型方法的使用
@Test
public void test5(){
Order order = new Order();
//调用泛型方法
Integer i = order.getE(50);//指定参数,返回类型确定为Integer
Double d = order.getE(4.3);//返回类型为Double
Integer[] ints = new Integer[]{1,2,3};
List list = new ArrayList<>();
List list3 = order.fromArrayToList(ints, list);
System.out.println(list3);
}
4、泛型与继承的关系
类之间存在继承关系,String类是Object类的子类,那么泛型中List与List
List与List
/*
* List
其实,List与List 有共同的父类:List> ,这就是通配符?的作用,看下节。
5、通配符
通配符,就是应对泛型类之间的继承关系的,分三种:
List> 是所有List的父类
代码:
/**
* 通配符?
* List> 是所有List、List ... 的父类
*/
public void test7(){
List> list=null;//共同的父类,通配符?
List listObject = new ArrayList();
List listString = new ArrayList();
list = listObject;
list = listString;
show(listObject);
show(listString);
}
分页显示一直是web开发中一大烦琐的难题,传统的网页设计只在一个JSP或者ASP页面中书写所有关于数据库操作的代码,那样做分页可能简单一点,但当把网站分层开发后,分页就比较困难了,下面是我做Spring+Hibernate+Struts2项目时设计的分页代码,与大家分享交流。
1、DAO层接口的设计,在MemberDao接口中定义了如下两个方法:
public in
/*
*使用对象类型
*/
--建立和使用简单对象类型
--对象类型包括对象类型规范和对象类型体两部分。
--建立和使用不包含任何方法的对象类型
CREATE OR REPLACE TYPE person_typ1 as OBJECT(
name varchar2(10),gender varchar2(4),birthdate date
);
drop type p
what 什么
your 你
name 名字
my 我的
am 是
one 一
two 二
three 三
four 四
five 五
class 班级,课
six 六
seven 七
eight 八
nince 九
ten 十
zero 零
how 怎样
old 老的
eleven 十一
twelve 十二
thirteen
spring security 3中推荐使用BCrypt算法加密密码了,以前使用的是md5,
Md5PasswordEncoder 和 ShaPasswordEncoder,现在不推荐了,推荐用bcrpt
Bcrpt中的salt可以是随机的,比如:
int i = 0;
while (i < 10) {
String password = "1234
1.前言。
如题。
2.代码
(1)单表查重复数据,根据a分组
SELECT m.a,m.b, INNER JOIN (select a,b,COUNT(*) AS rank FROM test.`A` A GROUP BY a HAVING rank>1 )k ON m.a=k.a
(2)多表查询 ,
使用改为le