一、泛型类
1、泛型类定义的语法如下:
[访问修饰符] class 类名称 <T>
2、泛型类使用代码如下:
//定义一个泛型类
public class Base<T> {
T m;
public Base(T t){
m = t;
}
public T getM(){
return m;
}
public void print(){
System.out.println("base print : " + m);
}
//使用该类
Base<String> base=new Base<String>("123");//只能是引用类型
Base<Integer> nInteger=new Base<Integer>(123);//只能是引用类型
Base string=new Base("abc");
Log.e("wangqi","string=="+string.getM());
Base mInt =new Base(123);
Log.e("wangqi","mInt=="+mInt.getM());
Base mDouble=new Base(123.00);
Log.e("wangqi","mDouble=="+mDouble.getM());
Base mBoolean=new Base(true);
Log.e("wangqi","mBoolean=="+mBoolean.getM());
Base mChar=new Base('c');
Log.e("wangqi","mChar=="+mChar.getM());
Base mFloat=new Base(123.1);
Log.e("wangqi","mFloat=="+mFloat.getM());
3、日志结果
12-28 21:14:50.307 3183-3183/wq.com.testdemo E/wangqi: string==abc
mInt==123
mDouble==123.0
12-28 21:14:50.308 3183-3183/wq.com.testdemo E/wangqi: mBoolean==true
mChar==c
mFloat==123.1
备注说明:
- 泛型类的主要作用在于类被实例化后,传入具体的类型参数,对类的成员属性的类型和成员方法的参数类型和返回值类型进行替换
- T可以用任何一种引用类型,但是不允许使用基本类型,如int、double、char、boolean等是不允许的。泛型类定义时,可以使用T来定义其成员变量和成员方法的返回值和参数
- 泛型标识,可以是字母、中文字符等,不过一般用大写英文字符
二、泛型方法
1、泛型方法的定义如下:
[public] [static] <T> 返回值类型 方法名(T 参数列表)
2、泛型类使用代码如下:
public class MainActivity extends AppCompatActivity {
private String a[]={"a","b","c","d","e"};
private Integer c[]={1,2,3,4,5};
private Character b[]={'1','2','3','4','5'};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
print(a);
print(b);
print(c);
}
});
}
public <M> void print(M[] list) {
System.out.println();
for (int i = 0; i < list.length; i++) {
Log.e("wangqi","list[i]=="+list[i]) ;
}
System.out.println();
}
}
3、日志结果
12-28 21:34:36.466 3904-3904/wq.com.testdemo E/wangqi: list[i]==a
12-28 21:34:36.467 3904-3904/wq.com.testdemo E/wangqi: list[i]==b
list[i]==c
list[i]==d
list[i]==e
list[i]==1
list[i]==2
list[i]==3
list[i]==4
list[i]==5
list[i]==1
list[i]==2
list[i]==3
list[i]==4
list[i]==5
备注说明:
- 泛型方法主要用于容器类,Java中任何方法,包括静态的(注意,泛型类不允许在静态环境中使用)和非静态的,均可以用泛型来定义,而且和所在类是否是泛型没有关系
- 使用泛型方法时,至少返回值或参数有一个是泛型定义的,而且应该保持一致,否则可能会受到各种限制
三、泛型接口