1、泛型指定的类型为引用类型,不能为基本类型;(如:Double,而不能用double)
注:如果使用了一个带有泛型的类,但没有指定明确的类型,则默认会使用Object描述
2、jdk1.7之后,声明带泛型的类时,后边的类型可以省略
如:Point<String> point = new Point<String>();
--->Point<String> point = new Point<>();
3、通配符‘?’:标识只能够取值,不能够赋值;
·在使用泛型接收的时候使用通配符,可以保证参数的统一;
··在‘?’通配符的基础上还有两个子通配符
···? extends 类,设置泛型上限:可以在声明类上、方法的参数上使用;
例如:? extends Number 意味着只能设置Number或者Number的子类(Integer\Double等)
···? super 类,设置泛型下限:方法参数上使用
例如:? extends String意味着只能设置String或者String的父类Object
4、泛型接口
4.1、泛型接口
public interface TestJava84<T> {
void apply(T t);
}
4.2、泛型接口的实现类
方式1
public class TestJava83Imp<T> implements TestJava84<T> {
@Override
public void apply(T t) {
System.out.println(t);
}
}
方式2:直接指定类型
public class TestJava84Imp implements TestJava84<String> {
@Override
public void apply(String t) {
System.out.println(t);
}
}
4.3、应用方式
public static void main(String[] args) {
TestJava84<String> testJava84 = new TestJava84Imp();
testJava84.apply("hello !");
}
5、泛型方法
public class TestJava8Service {
public static void main(String[] args) {
System.out.println(testJava83Method((s)->s).toString());
}
public static <T,R> R testJava83Method(TestJava83<T,R> t){
String aa = "";
Integer bb = 0;
Boolean cc = false;
return t.apply((T)bb);
}
}