关闭

从零基础接触java第七周第三节

标签: java初始学习
74人阅读 评论(0) 收藏 举报
分类:

  前面我跟大家简单地分享了多线程,但是我这儿少了进程和进程之间关系的生产者和消费者,以及线程池大家下来都可以去百度看看。

  今天我要跟大家分享的是泛型。什么是泛型?前面我给大家说了类,以及我们定义变量时需要用的int、float、double等数据类型,还有String等,如果在我们定义时,我们想定义一个不确定的类型,然后在我们调用的时候再来改变,这样就可以用泛型。那么先来看看泛型的写法吧,请看一下代码:

public class Test{
public static void main(String[] args){
Genericity<String> g = new Genericity<String>();
g.setName("张三");
System.out.println(g.getName());
}
}
class Genericity<T>{
T name;
public T getName() {
return name;
}
public void setName(T name) {
this.name = name;
}
}

首先大家可以看到,我在主函数test下面定义了一个泛型类,然后奇怪的是我在这个类后面加了个"<T>",这便表示定义了一个泛型T,而且定义在类的后面,当然,方法中也可以,现在大家先不管,然后,我通过定义的T,直接去在类里面定义了一个name和方法geName以及setName,也许因为是T你有些看不懂,但是,你把类里面的所有T换成String的话,也许你就会恍然大悟,哦,原来如此。然后,接下来大家看主函数我是如何调用这个泛型的,我按照常规先new了这个类,只不过在有两个地方加了<String>这样的样式,表示声明我这个泛型是String类型,然后我调用setName的时候,便可以直接传入字符串,但是如果我传入其他东西便会错误。如果我在调用时声明的是其他类型,比如integer,那么我便只能用数字,不能用字符串,关于泛型简单的了解便是这些了,大家下来可以多多研究研究。

  接下来我要给大家继续延伸泛型,首先,刚才代码中,我们只是单独地定义了一个泛型,然而,我们的泛型可以一次定义多个,比如以下代码:

public class Test{
public static void main(String[] args){
Genericity<String,Integer> g = new Genericity<String,Integer>();
g.setName("张三");
g.setAge(18);
System.out.println("姓名:"+g.getName()+",年龄:"+g.getAge());
}
}
class Genericity<T,K>{
T name;
K age;
public K getAge() {
return age;
}
public void setAge(K age) {
this.age = age;
}
public T getName() {
return name;
}
public void setName(T name) {
this.name = name;
}
}

关于以上代码我只是在T后面多加了泛型类型K,我相信不用我过多解释大家一眼就会明白,我要延伸的可不是这个,而是泛型中的通配符,什么是通配符,再看以下代码:

public class Test{
public static void main(String[] args){
Genericity<String,Integer> g = new Genericity<String,Integer>();
g.setName("张三");
g.setAge(18);
pln(g);
}
public static void pln(Genericity<?,?> g){
System.out.println("姓名:"+g.getName()+",年龄:"+g.getAge());
}
}
class Genericity<T,K>{
T name;
K age;
public K getAge() {
return age;
}
public void setAge(K age) {
this.age = age;
}
public T getName() {
return name;
}
public void setName(T name) {
this.name = name;
}
}

大家可以看到,我在主函数中又多加了个pln的方法,这个方法中我调用了泛型这个对象,但是我调用的时候必须要同时传入它的泛型类型,但是我那时并不知道它的类型,所以我便只有通过"?"这个符号,通配符来进行设置,不管上面调用什么类型,我这儿便转换为什么类型,从而达到类型一致,这便是通配符。泛型还未讲完,今天的泛型就跟大家分享到这儿,有什么错误或者问题都可以留言,我会尽快回答,谢谢。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1676次
    • 积分:257
    • 等级:
    • 排名:千里之外
    • 原创:25篇
    • 转载:0篇
    • 译文:0篇
    • 评论:6条
    文章分类
    文章存档