泛型
在写代码时有些时候同一种方法要根据不同的输入类型进行不同的返回,在没有泛型的情况下我认为有以下几种解决方式:
- 设置不同的类或不同的方法。
- 需要输入类型继承特殊接口。
- 将输入类型转化为Object传入,之后将输出再强转。
以上个点劣势1:代码过多,不便于维护 2:有效减少1中的代码,不过目标类的继承多至少一个接口,同样对于维护有压力 3:代码最少,目标类便于维护,但是在类型转换时会有类型安全问题。
为了更方便维护和更优雅的编码,在java5中java提供了一个新的特征:泛型。本文测试环境java9,同时很多语言都有泛型不过各有差别
基础应用
泛型实例
public class Generic<T> {//设置T为接受类型,之后的T全为之后接收的类型
public T t;
public void set(T t){
this.t = t;
}
public T get(){return t;}
}
public class demo {
public static void main(String[] arg){
Generic<String> g = new Generic<String>();//设置接受类型为String
g.set("Demo Generic");//接受一个String
System.out.println(g.get());//输出一个String
}
}
运行结果
Demo Generic
泛型元组
简单地说就是一个类或者方法接收多个泛型
public class Generic<A, B, C> {
public A a;
public B b;
public C c;
public void set(A a, B b, C c){
this.a = a;
this.b = b;
this.c = c;
}
public A getA(){return a;}
public B getB(){return b;}
public C getC(){return c;}
}
public class demo {
public static void main(String[] arg){
Generic<String, Integer, Boolean> g = new Generic<String, Integer, Boolean>();
g.set("Demo Generic", 21, true);
System.out.println("A is : " + g.getA());
System.out.println("B is : " + g.getB());
System.out.println("C is : " + g.getC());
}
}
运行结果
A is : Demo Generic
B is : 21
C is : true
泛型在函数上的运用
public class Generic {
public <A, B, C> String massage(A a, B b, C c){
return a.toString() + " " + b.toString() + " " + c.toString();
}
}
public class demo {
public static void main(String[] arg){
Generic g = new Generic();
System.out.println(g.massage("Demo", 21, true));
}
}
运行结果
Demo 21 true
泛型接口
接口
public interface GenericInterface<T> {
T massage(T t);
}
public class Generic implements GenericInterface<Integer> {
@Override
public Integer massage(Integer i) {
return i;
}
}
public class demo {
public static void main(String[] arg){
Generic g = new Generic();
System.out.println("the number is : " + g.massage(21));
}
}
测试结果
the number is : 21