泛型类
// 简单泛型
class Point<T>{ // 此处可以随便写标识符号,T是type的简称
private T var ;
public T getVar(){
return var ;
}
public void setVar(T var){
this.var = var ;
}
}
多元泛型
public class User<K, V> {
private K id;
private V name;
public K getKey() {
return id;
}
public void setKey(K id) {
this.id = id;
}
public V getValue() {
return name;
}
public void setValue(V name) {
this.name = name;
}
public User(K id, V name) {
this.id = id;
this.name = name;
}
public static void main(String[] args) {
User<Long, String> user = new User<>(123L, "张三");
System.out.println(user.getKey());
System.out.println(user.getValue());
}
}
泛型接口
// 泛型接口,带一个抽象方法
interface Info<T>{
public T getVar() ;
}
// 泛型接口实现类
class InfoImpl<T> implements Info<T>{
private T var ;
public InfoImpl(T var){
this.setVar(var) ;
}
public void setVar(T var){
this.var = var ;
}
public T getVar(){
return this.var ;
}
}
public class GenericsDemo24{
public static void main(String arsg[]){
Info<String> i = new InfoImpl<String>("汤姆") ;
System.out.println("内容:" + i.getVar()) ;
}
}
泛型方法
// 参数类型是 Number 子类
private static <T extends Number> double add(T a, T b) {
return a.doubleValue() + b.doubleValue();
}
// 带泛型的字节码对象作为参数
private static <T> T test(String s, Class<T> t) {
return JSONObject.parseObject(string, t);
}
public static void main(String[] args) {
add(1, 2);
User user = test("{\"name\":\"Marry\",\"age\":18}", User.class);
}
泛型上下限
// 指定上限:只能是 Number 或其子类
static class Info<T extends Number>{
}
// 指定下限(只能用在方法上):必须是 Integer 或其父类
public static void test(Info<? super Integer> info){
}