不想把狗放到鸡窝里?那就使用泛型

举报
周杰伦本人 发表于 2022/11/29 18:35:06 2022/11/29
【摘要】 不想把狗放到鸡窝里?那就使用泛型 泛型作用于类 泛型作用于方法 泛型作用于接口 泛型标记符 总结 不想把狗放到鸡窝里?那就使用泛型泛型在Java语言中也是一个重要的概念,利用泛型可以告诉编译器我们需要什么样的类型。泛型经常作用于容器上,比如前面我们说到的List、Set和Map中。利用泛型可以让我们的代码更加的泛化。 泛型作用于类泛型不仅可以作用于类上:public class Xpp<T...

不想把狗放到鸡窝里?那就使用泛型

泛型在Java语言中也是一个重要的概念,利用泛型可以告诉编译器我们需要什么样的类型。泛型经常作用于容器上,比如前面我们说到的List、Set和Map中。利用泛型可以让我们的代码更加的泛化。

泛型作用于类

泛型不仅可以作用于类上:


public class Xpp<T> {
  private T a;
  public Xpp(T a) { 
    this.a = a; 
  }
  public void set(T a) { 
    this.a = a; 
  }
  public T get() { 
    return a; 
  } 
}

需要使用什么类型参数,就在类名后面添加尖括号,尖括号中是T,T是Type的意思,也就是Java类,表示的是类型参数,暂时不指定类型。

泛型也可以作用于匿名内部类。

泛型作用于方法

泛型还可以作用于方法上:

public class Xpp {
    public <T> void f(T x) {
        System.out.println(x.getClass().getName());
    }
    public static <T> List<T> makeList(T... args) {
        List<T> result = new ArrayList<T>();
        for (T item : args)
            result.add(item);
        return result;
    }

    public static void main(String[] args) {
        Xpp xpp = new Xpp();
        xpp.f("");
        xpp.f(1);
        xpp.f(1.0);
      	List<String> ls = makeList("A");
        System.out.println(ls);
        ls = makeList("A", "B", "C");
        System.out.println(ls);
    }
}

这里定义了两个泛型的方法,第一个方法可以传入任何类型的参数,可以看出返回的参数类型也是任何类型的参数。

这个代码的输出结果为参数类型,即 java.lang.String java.lang.Integerjava.lang.Double

第二个方法表示可以传入不定数目的任何类型的参数,使用T... args来表示。

泛型作用于接口

泛型还可以作用于接口上:
定义接口:

public interface Xpp<T> { 
	T next(); 
} 

这里定义了一个泛型的接口,可以有如下的实现类:

public class Integer implements Generator<java.lang.Integer> {
  private int value = 0;
  public java.lang.Integer next() { 
  	return value++; 
  }
}

实现类中指明了具体的参数类型为Integer类型。

泛型标记符

泛型标记符除了我们上面用到的T,还有E,E表示集合元素Element,一般在集合中使用,?表示不确定的Java类型,<? extends Xpp>表示可以使用Xpp和它的子类,<? super Person>表示可以使用Xpp和它的父类

总结

这篇文章主要讲了泛型的一些知识点,包括他可以作用于普通类、匿名内部类、方法、接口上,使用泛型可以让我们的代码更加泛化,值得注意的是,泛型并不是一开始就有的,而是后来加进来的。泛型主要是容器中使用,保证一定的安全的需要,防止其他类型的对象放入了不属于它的集合中。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。