一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第27天,点击查看活动详情。
哈喽,各位小伙伴们好,我是喵手。
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流学习,互相学习,才能成长的更快,对吧。
我是一名java开发,所以日常接触到最多的就是java啦,所以我趁自己有空,就来好好回忆,把自己学到的会的,进行输出,不图什么有回报,只想能帮助到更多的小伙伴,就好。
小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对喵手我创作道路上最好的鼓励与支持!
一、前言
论前几期啊,我们是分别讲了Object类、Date类、FormDate类、Calendar类、System类及StringBuilder类,不知道大家掌握的如何,如果没有及时巩固的同学,可以看我这里,我给大家罗列了下,快速学习通道,只希望能帮助到大家更好的学习与成长,这就是我写作的初衷。
上一期我们是讲了泛型的上半部分,不知道你们学的咋样,现在我要把泛型的下半部分给讲掉,如果有小伙伴没有掌握,可以去看我上篇的教内容,然后再来看我的这一期,好吧?
我们在集合中基本都会使用到泛型,那么这一期,我们来把泛型知识学完整吧。
泛型,我们都知道可灵活运用的将数据类型应用到不同的类、接口及方法中。并且将数据类型作为参数进行传递。
二、泛型的定义与使用
1️⃣定义和使用含有泛型的类
那么定义一个含有泛型的类?并且使用它?这个对于你们而言,简单,但是你得先看我写的,我会教你。
定义泛型类的格式:
修饰符 class 类名<代表泛型的变量> {
}
举个例子,具体如下:
class ArrayList<E> {
//添加方法
public boolean add(E e){
}
//获取方法
public E get(int index){
}
}
注意:在你创建对象的时候确定泛型。
例如使用上方的ArrayList类:
ArrayList<Integer> list = new ArrayList<Integer>();
看上方创建了一个ArrayList对象,其变量E就是Integer类型,我们其实就能这么理解:
class ArrayList<Integer>{
public boolean add(Integere){
//
}
public String get(int index){
//
}
}
再比如:
ArrayList<String> list = new ArrayList<String>();
其他也是一样的。我就不一一举例啦。
2️⃣含有泛型的方法
我们说除了带有泛型的类,还有方法,那么定义一个带有泛型的方法得怎么实现呢?
定义泛型方法的格式:
修饰符 <代表泛型的变量> 返回值类型 方法名(参数){
//
}
举个例子,具体如下:
public class MyGenericMethod {
public <R> void run(R r) {
System.out.println(r.getClass());
}
public <R> R jump(R r) {
return r;
} }
那定义好了,该如何使用该方法呢?
具体请看我实例演示:
public static void main(String[] args) {
//创建对象
MyGenericMethod myGenericMethod = new MyGenericMethod();
//演示看方法提示
myGenericMethod.run(100);
String jump = myGenericMethod.jump("我会跳!");
System.out.println(jump);
}
具体运行截图:
3️⃣含有泛型的接口
除了带有泛型的类、方法,还有接口,它也可以带有。
定义泛型接口的格式:
修饰符 interface接口名<代表泛型的变量> { }
举个例子,具体如下:
public interface MyGenericInterface<R> {
public abstract void add(R r);
public R getR();
}
都知道是接口,那使用的话,我们就得实现该接口,使用implements关键字。
此时,你在实现的时候,就得确定泛型R,比如我定义为Integer。
public class MyGenericInterfaceImpl implements MyGenericInterface<Integer> {
@Override public void add(Integer integer) {
//
}
@Override
public Integer getR() {
//
return null;
}
}
当然,你一样也可以在创建对象时确定泛型。
举个例子,具体如下:
public class MyGenericInterfaceImpl2<R> implements MyGenericInterface<R> {
@Override
public void add(R r) {
//
}
@Override
public R getR() {
//
return null;
}
}
所以,你要在创建该MyGenericInterfaceImpl2 对象时,就需要确定泛型了。
比如:
public static void main(String[] args) {
//创建对象
MyGenericInterfaceImpl2<String> impl2 = new MyGenericInterfaceImpl2<String>();
impl2.add("添加啦");
}
三、泛型通配符
那讲到这里,我就要科普一个新东西了,通配符。当你使用泛型类或泛型接口时,传递的数据中,泛型类型不确定,你就可以用通配符<?>表示。但是一旦使用泛型的统配符,只能用Object类中的共性方法了,集合中元素自身的方法也无法使用。
1️⃣基本使用
泛型的通配符:不知道使用什么类型来接收的时候,此时可以使用?,?表示未知通配符。
此时只能接受数据,不能往该集合中存储数据。
举个例子,大家请看:
public static void main(String[] args) {
Collection<String> list1 = new ArrayList<>();
getElement(list1);
Collection<Integer> list2 = new ArrayList<>();
getElement(list2);
}
//?代表可以接收任意类型
public static void getElement(Collection<?> coll) {}
然后还有一部分,作为高级部分,我打算放在后期再更, 涉及到泛型的上限,下限等。
... ...
好啦,以上就是本期内容的全部教学内容啦,如果对文中的任何知识点有疑问,欢迎评论区评论留言呀,我看见都会一一解答的。
四、结尾
教学是结束了,但是有些话不知我但讲不当讲,啊哈哈, 可我还是想说给你们听听。如下是我很喜欢的一句话,我打算送给你们,希望我们都能变得更好更优秀。
学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!
wished for you successed !!!
-------------------------------------------
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。
-------------------------------------------