}
}
当传入的参数是一个类的时候
public class demo2 {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add(new Student(“zhang”,12));
list.add(new Student(“zhao”,15));
list.add(new Student(“zhou”,18));
Iterator iterator = list.iterator();
while(iterator.hasNext()){
Student s = iterator.next();
System.out.println(s.getName()+“—”+s.getAge());
}
}
}
其实我们在api中查阅相关内容的时候,就应该已经见过泛型的相关用法了
这里的就是泛型的表现
为什么这里的<>里面是一个E,而不是明确的String,Integer等引用数据类型呢?
因为这里的E仅仅表示的是一种参数类型,这个参数类型是一个变量,可以指代任意一种引用数据类型,具体是哪
必看视频!获取2024年最新Java开发全套学习资料 备注Java
种根据实际使用的时候传入的数据类型。
而这个既然是变量,只要符合变量的命名规则就是可以的,为了有辨识度,通常使用E或者T来作为括号里面的内容
泛型的高级用法:(通配符)
泛型通配符< ? > —— 任意类型,如果没有明确,那么就是Object以及任意的Java类了
< ? extends E> —— 向下限定,E,与E同级的类及其子类
< ? super E> —— 向上限定,E,与E同级的类及其父类
public class demo3 {
public static void main(String[] args) {
ArrayList<?> arrayList = new ArrayList<>();
//泛型通配符<?>
//表示任意类型,可以是Object以及任意的Java类
ArrayList<?> objects1 = new ArrayList();
ArrayList<?> objects2 = new ArrayList();
ArrayList<?> objects3 = new ArrayList();
//<? extends E> 向下限定,E及其子类
ArrayList<? extends Animal> list1 = new ArrayList();
ArrayList<? extends Animal> list2 = new ArrayList();
ArrayList<? extends Animal> list3 = new ArrayList();
//<? super E> 向上限定,E及其父类
ArrayList<? super Animal> list11 = new ArrayList();
ArrayList<? super Animal> list22 = new ArrayList();
//错误写法ArrayList<? super Animal> list33 = new ArrayList();
}
}
泛型类
泛型类:把泛型定义在类上面
package test.GenericDemo;
//这里的T是一个参数,可以指代任意的引用数据类型
//这个类的setObj方法可以传入String,Integer等多种数据类型
public class genericDemo1 {
private T obj;
public void setObj(T obj){
this.obj = obj;
}
public T getObj(){
return obj;
}
}
写一个类来使用泛型类
package test.GenericDemo;
public class genericTest1 {
public static void main(String[] args) {
//虽然我们定义了一个泛型类,但是也可以不去使用它
genericDemo1 g1 = new genericDemo1();
//此时g1可以传入任意的参数
g1.setObj(“hello”);
System.out.println(g1.getObj()); //hello
g1.setObj(20);
System.out.println(g1.getObj()); //20
/*
虽然上面都成功的打印出了结果,但实际上,这里的hello与20都是 Object 类型
尝试一下下面这条语句
String s= g1.getObj();
如果这样写就会报错,错误原因是Object无法转换为String类型
因此如果我们只需要String类型的话,就需要使用泛型来定义
*/
genericDemo1 g2 = new genericDemo1<>();
g2.setObj(“hello”);
String s = g2.getObj();
System.out.println(s); //hello,结果正确
}
}
泛型方法
泛型方法:将泛型定义方法上
格式:public <泛型类型> 返回类型 方法名(泛型类型 变量名)
先来看看如果不使用泛型,写一个传入多种数据类型的方法是什么样子
public class genericDemo2 {
public void show(String s){
System.out.println(s);
}
public void show(Integer i){
System.out.println(i);
}
public void show(Boolean b){
System.out.println(b);
}
}
写一个类来测试
public class genericTest2 {
public static void main(String[] args) {
genericDemo2 g1 = new genericDemo2();
g1.show(“hello”); //hello
g1.show(12); //12
g1.show(true); /true
}
}
结果是正确的,但如果我们每需要传入一种数据类型,就需要写一个对应的方法,这样未免太过麻烦
这时候就用到泛型方法了
格式:public <泛型类型> 返回类型 方法名(泛型类型 变量名)
package test.GenericDemo;
//泛型方法
public class genericDemo2 {
public void show(T t){
System.out.println(t);
}
}
写一个测试类
package test.GenericDemo;
public class genericTest2 {
public static void main(String[] args) {
genericDemo2 g2 = new genericDemo2();
g2.show(“hello”); //hello
g2.show(12); //12
g2.show(12.23); //12.23
g2.show(true); //true
}
}
同样可以打印这些对应的结果,但是省却了很多代码
泛型接口
把泛型定义在接口上
格式:public interface 接口名<泛型类型1…>
接口
public interface genericDemo3 {
public abstract void show(T t);
}
实现接口的类
public class genericImpl implements genericDemo3 {
@Override
public void show(T t) {
System.out.println(t);
}
}
具体的测试类
package test.GenericDemo;
public class genericTest3 {
public static void main(String[] args) {
genericImpl g1 = new genericImpl();
g1.show(“hello”); //hello
genericImpl g2 = new genericImpl<>();
g2.show(12); //12
}
}
实例
选择学生中年龄大于30岁的学生对象
package lambdaDemo;
public interface filterInterface {
public boolean judge(Student s);
}
这里的类名filterStudentByAge后面不能加上< Student >,加上就会报错
最后
为什么我不完全主张自学?
①平台上的大牛基本上都有很多年的工作经验了,你有没有想过之前行业的门槛是什么样的,现在行业门槛是什么样的?以前企业对于程序员能力要求没有这么高,甚至十多年前你只要会写个“Hello World”,你都可以入门这个行业,所以以前要入门是完全可以入门的。
②现在也有一些优秀的年轻大牛,他们或许也是自学成才,但是他们一定是具备优秀的学习能力,优秀的自我管理能力(时间管理,静心坚持等方面)以及善于发现问题并总结问题。
如果说你认为你的目标十分明确,能做到第②点所说的几个点,以目前的市场来看,你才真正的适合去自学。
除此之外,对于绝大部分人来说,报班一定是最好的一种快速成长的方式。但是有个问题,现在市场上的培训机构质量参差不齐,如果你没有找准一个好的培训班,完全是浪费精力,时间以及金钱,这个需要自己去甄别选择。
我个人建议线上比线下的性价比更高,线下培训价格基本上没2W是下不来的,线上教育现在比较成熟了,此次疫情期间,学生基本上都感受过线上的学习模式。相比线下而言,线上的优势以我的了解主要是以下几个方面:
①价格:线上的价格基本上是线下的一半;
②老师:相对而言线上教育的师资力量比线下更强大也更加丰富,资源更好协调;
③时间:学习时间相对而言更自由,不用裸辞学习,适合边学边工作,降低生活压力;
④课程:从课程内容来说,确实要比线下讲的更加深入。
应该学哪些技术才能达到企业的要求?(下图总结)
优秀的自我管理能力(时间管理,静心坚持等方面)以及善于发现问题并总结问题。
如果说你认为你的目标十分明确,能做到第②点所说的几个点,以目前的市场来看,你才真正的适合去自学。
除此之外,对于绝大部分人来说,报班一定是最好的一种快速成长的方式。但是有个问题,现在市场上的培训机构质量参差不齐,如果你没有找准一个好的培训班,完全是浪费精力,时间以及金钱,这个需要自己去甄别选择。
我个人建议线上比线下的性价比更高,线下培训价格基本上没2W是下不来的,线上教育现在比较成熟了,此次疫情期间,学生基本上都感受过线上的学习模式。相比线下而言,线上的优势以我的了解主要是以下几个方面:
①价格:线上的价格基本上是线下的一半;
②老师:相对而言线上教育的师资力量比线下更强大也更加丰富,资源更好协调;
③时间:学习时间相对而言更自由,不用裸辞学习,适合边学边工作,降低生活压力;
④课程:从课程内容来说,确实要比线下讲的更加深入。
应该学哪些技术才能达到企业的要求?(下图总结)
[外链图片转存中…(img-glRwS78Q-1716464591134)]
[外链图片转存中…(img-6KIY3tXs-1716464591135)]