首页 > 其他分享 >不想把狗放到鸡窝里?那就使用泛型

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

时间:2022-11-04 19:31:53浏览次数:42  
标签:放到 可以 类型 参数 泛型 Xpp 鸡窝 public

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

泛型在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. 欢迎关注我❤️,点赞

    标签:放到,可以,类型,参数,泛型,Xpp,鸡窝,public
    From: https://blog.51cto.com/u_15460453/5824718

相关文章

  • Android kotlin泛型知识点梳理
    前言学习知识需要提前设立目标,带着问题学习才能有的放矢。无论是java的泛型还是kotlin语言的泛型均是写框架,写通用工具类神器。如果不熟悉泛型语法,开发过程中将会遇到很多奇......
  • 一种基于字典传递的Go泛型翻译方法
    https://mp.weixin.qq.com/s/xrFqTVJbwc-iST2D9xPQ3w一种基于字典传递的Go泛型翻译方法原创 宋林海 字节跳动技术质量 2022-11-0317:00 发表于上海来自牛津大学(Nob......
  • day24 JDBC批处理(通用泛型查询方法 & 下划线转驼峰命名法)
    批处理publicstaticIntegeraddBatch(String[]sqls){ init(); try{ //设置关闭自动提交 conn.setAutoCommit(false); Statementstmt=conn.createState......
  • 泛型(genericity)
    泛型的概念所谓泛型就是编写一种模板实现任意数据类型都可使用的目的,既实现了编写一次,万能匹配,又通过编译器保证了类型安全向上转型如下所示,ArrayList<T>实现了List<T>,......
  • 泛型集合List(C#)
    1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;56namespaceListDemo7{8classProgram9{10staticvoidMai......
  • java-泛型-3
    package泛型;importjava.util.*;/***泛型的高级使用*1.泛型的继承或接口,用extends在<>里面实现*2.语法:A<TextendsanyClass>a;这里的泛型T必须是anyClass的子类......
  • java-泛型-2
    package泛型;/***泛型的继承4种情况*1.全部继承Father<T1,T2>{}my<T1,T2,T3>extendsFather<T1,T2>{}*2.部分继承就是在继承的时候,给父类的泛型进行实例化*F......
  • Ubuntu18.04中修改Ubuntu的外观(菜单栏放到屏幕下方)
    https://blog.csdn.net/hzx_728/article/details/91952512?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFrom......
  • 泛型受限
    packagecom.msb.test06;importjava.util.ArrayList;importjava.util.List;/***@author:liu*日期:16:15:22*描述:IntelliJIDEA*版本:1.0*/publi......
  • C# HashSet不要遍历或者使用泛型扩展方法
    C#的接口IEnumerable定义了GetEnumerator方法,它的拓展方法是都是基于这个迭代器实现的。当我们使用比如,First、Where等泛型方法时,会实例化一个迭代器Enumerator包含......