一、泛型类
- 定义:类<> 表示泛型类 eg:
public class text <T>{ T t; public T getT() { return t; } public void setT(T t) { this.t = t; } }
text<>就是泛型类,泛型的本质是参数化类型,所操作的数据类型被指定为一个参数。可以看出这比较抽象。所以可以理解成模板,或者方程式,输入不同参数实现不同结果。
这有一个例子:对于输出String int double 自己定义一个输出方法 ,main函数调用输出方法。
在没有使用泛类之前,创建对象或者使用都需要定义好函数或者方法,且这都是固定死的模板,所以对于不同类型,要写不同输出方法。
而使用范类之后可以理解:这是一个万能模板,其中类型或者对象并没有写死。只要把类型定义成变量,在没有输出之前都是,直到调用输出才需要直到其类型。所以只需要一个者方法。
package 泛型类;
public class text <T>{//泛型
T t;//可以理解未定型 ,使用时在赋类型
public T getT() {//get,set方法
return t;
}
public void setT(T t) {
this.t = t;
}
public static void main(String[] args) {
text cs=new text();
String s="您好";
cs.setT(s);//传递后T就是String类型
System.out.println(cs.getT());
int i=1;
cs.setT(i);//传递后T就是int类型
System.out.println(cs.getT());
double d=3.14;
cs.setT(d);//传递后T就是double类型
System.out.println(cs.getT());
}
}
结果:
如果不用泛型结果输出类型就本应该是固定的如下:
package 非泛型类;
public class textcs {
String s;
public String getS() {
return s;
}
public void setS(String s) {
this.s = s;
}
public static void main(String[] args) {
textcs cs=new textcs();
String s="您好";
cs.setS(s);
System.out.println(cs.getS());
}
}
package 非泛型类;
public class textcs2 {
int i;
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public static void main(String[] args) {
textcs2 cs=new textcs2();
int i=1;
cs.setI(i);
System.out.println(cs.getI());
}
}
不难看出泛型如同模板,不是固定的,但是运行时必须明确指定具体的类型。
实战中泛型的使用:
如果不定义泛型类,应该创建学生集合 ArrayList<student> list=new ArrayList<>(); //写死了。 如果在创建一个老师集合,就要到这个类来改把student改teacher比较麻烦。
定义泛型类后,要调用声明即可,可以是老师,可以是学生,可以是其他集合,更灵活更方便。
其实我们也常用泛型类 比如:ArrayList<Int> 整形集合 ArrayList<String> 字符型集合.....
二、重构
1.什么是重构:
简单讲:重构就是对已有代码优化。
定义:重构是指通过对软件系统中的代码进行修改,改善其设计、结构和可读性的过程,而不改变其外部行为。重构目的在提高代码的质量,使其更易于理解、扩展和维护。
2.为什么需要重构(重构带来好处):
-
提高代码质量:重构可以去除冗余、复杂和低效的代码,使代码更具可读性、可维护性和可扩展性。
-
简化理解与调试:通过重构,可以将复杂的代码分解成更小、更简洁的部分,从而更容易理解和调试。
-
优化性能:重构可以帮助我们识别出潜在的性能问题,并进行优化,使代码运行更高效。
-
改进设计:重构可以改进系统的整体设计,使其更灵活、可扩展和符合设计原则。
-
提高团队协作:重构可以使代码更加清晰和可读,有利于团队成员之间的合作与沟通。
-
扩展功能:通过重构,可以为系统添加新的功能和特性,而不会产生额外的复杂性和风险。
总结:重构可以提高代码质量、简化理解与调试、优化性能、改进设计、提高团队协作并扩展功能,进而提高开发效率和软件质量。
3.运用场景:代码维护、性能优化、架构改进、代码审查与重构、团队合作与知识分享,以及新功能开发等。