0
点赞
收藏
分享

微信扫一扫

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

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

泛型在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 foo(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.foo("");
        xpp.foo(1);
        xpp.foo(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和它的父类

总结

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

❤️ 感谢大家

如果你觉得这篇内容对你挺有有帮助的话:

  1. 欢迎关注我❤️,点赞👍🏻,评论🤤,转发🙏
  2. 关注盼盼小课堂,定期为你推送好文,还有群聊不定期抽奖活动,可以畅所欲言,与大神们一起交流,一起学习。
  3. 有不当之处欢迎批评指正。
举报

相关推荐

0 条评论