嵌入式之路,贵在日常点滴
---阿杰在线送代码
目录
问题:如果我们需要产生多个对象,每个对象的逻辑完全一样,只要对象内的成员变量的类型不同,那我们如何去做?
- 创建多个类文件,给每个类中的成员变量设置指定的数据类型。
缺点:这种方式会导致类的膨胀,重用型太差。
class Cls1
{
int a;
public Cls1(int a){
this.a = a;
}
public int getData(){
return a;
}
}
class Cls2
{
String a;
public Cls2(String a){
this.a = a;
}
public String getData(){
return a;
}
}
public class Test {
public static void main(String[] args) {
Cls1 cls1 = new Cls1(10);
System.out.println(cls1.getData());
Cls2 cls2 = new Cls2("ajie");
System.out.println(cls2.getData());
}
}
运行结果:
10
ajie
- 创建一个类文件,给这个类中的成员变量设置Object数据类型。
缺点,编译的时候正常,但运行的时候可能会异常。 (因为其类型比较模糊,有时候做了错误得类型转换就会导致运行程序时崩溃,编译没有错误)
鼠标定位到数据类型,右键 选择 Type Hierarchy
观察可以看出Object是所有数据类型的父类
class Cls1
{
Object a;
public Cls1(Object a){
this.a = a;
}
public Object getData(){
return a;
}
}
public class Test {
public static void main(String[] args) {
Cls1 cls1 = new Cls1(10);
System.out.println(cls1.getData());
Cls1 cls2 = new Cls1("ajie");
System.out.println(cls2.getData());
}
}
为解决此问题,我们引入 泛型
一、泛型简介
- 泛型可以在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的。
- 泛型的原理就是"类型的参数化",即把类型看作参数。也就是说把所要操作的数据类型看作参数,就像方法的形式参数是运行时传递的值的占位符一样。
- 简单的说,类型变量扮演的角色就如同一个参数,它提供给编译器用来类型检查的信息。
- 泛型可以提高代码的扩展性和重用性。
class Cls1<T>
{
T a;
public Cls1(T a){
this.a = a;
}
public T getData(){
return a;
}
}
public class Test {
public static void main(String[] args) {
Cls1<Integer> cls1 = new Cls1<Integer>(10);
System.out.println(cls1.getData());
Cls1<String> cls2 = new Cls1<String>("ajie");
System.out.println(cls2.getData());
}
}
运行结果:
10
ajie
myeclipse工程环境出错:Set project compiler compliance settings to '1.5'
二、泛型类及特点
1、泛型的类型参数可以是泛型类
class Cls1<T>
{
T a;
public Cls1(T a){
this.a = a;
}
public T getData(){
return a;
}
}
public class Test {
public static void main(String[] args) {
Cls1<Cls1<Integer>> cls1 = new Cls1<Cls1<Integer>>(new Cls1<Integer>(10));
System.out.println(cls1.getData().getData());
}
}
运行结果:
10