首页 > 其他分享 >泛型和原生类型

泛型和原生类型

时间:2023-05-29 12:34:30浏览次数:36  
标签:原生 Node List value next 类型 泛型 public


//泛型类的内部类可以访问到其外围类的类型参数。
//当你在一个泛型类中嵌套另一个泛型类时,最好为它们的类型参数设置不同的名字,即使那个嵌套类是静态的也应如此。
class LinkedList<E> {
	
	/* 访问外围类的类型参数
	private Node head = null;
	private class Node {
		E value;
		Node next;
		Node(E value, Node next) {
			this.value = value;
			this.next = next;
			head = this;
		}
	}
	public void add(E e) {
		new Node(e);
	}
	public void dump() {
		for (Node n = head; n != null; n = n.next)
			System.out.print(n.value + " ");
	}
	*/
	//使用静态类
	private Node<E> head = null;
	private static class Node<T> {
		T value;
		Node<T> next;
		Node(T value, Node<T> next) {
			this.value = value;
			this.next = next;
		}
	}
	public void add(E e) {
		head = new Node<E>(e, head);
	}
	public void dump() {
		for (Node<E> n = head; n != null; n = n.next)
			System.out.print(n.value + " ");
	}
}

 

 

//一个原生类型很像其对应的参数化类型,但是它的所有实例成员都要被替换掉,
//而替换物就是这些实例成员被擦除掉对应部分参数类型之后剩下的东西。
//具体地说,在一个实例方法声明中出现的每个参数化的类型都要被其对应的原生部分所取代。
//原生类型List 和参数化类型List<Object>是不一样的。
//如果使用了原生类型,编译器不会知道在List 允许接受的元素类型上是否有任何限制,它会允许你添加任何类型的元素到List 中。

//List<?>是一种特殊的参数化类型,被称为通配符类型(wildcard type)。
//像原生类型List 一样,编译器也不会知道它接受哪种类型的元素,但是因为List<?>是一个参数化类型,
//从语言上来说需要更强的类型检查。为了避免出现ClassCastException 异常,编译器不允许
//你添加除null 以外的任何元素到一个类型为List<?>的list 中。

//原生类型的成员被擦掉,是为了模拟泛型被添加到语言中之前的那些类型的行为。
//如果你将原生类型和参数化类型混合使用,那么便无法获得使用泛型的所有好处,
//而且有可能产生让你困惑的编译错误。另外,原生类型和以Object为类型参数的参数化类型也不相同。
@SuppressWarnings("rawtypes")
Pair p = new Pair<Object> (23, "skidoo");
System.out.println(p.first() + " " + p.last());
//编译错误:因为Pair p被声明为原生类型,擦除了所有的<>参数化类型信息,stringList()方法返回值类型为List,而不是List<String>。
//for (String s : p.stringList())
for (Object s : p.stringList())
	System.out.print(s + " ");

class Pair<T> {
	private final T first;
	private final T last;
	public Pair(T first, T last) {
		this.first = first;
		this.last = last;
	}
	public T first() {
		return first;
	}
	public T last() {
		return last;
	}
	public List<String> stringList() {
		return Arrays.asList(String.valueOf(first),
			String.valueOf(last));
	}
}

 

 

标签:原生,Node,List,value,next,类型,泛型,public
From: https://blog.51cto.com/u_16131764/6370074

相关文章

  • MySQL数据类型精讲
    1.MySQL中的数据类型常见数据类型的属性,如下:......
  • rust 初识基础: 变量、数据类型、函数、所有权、枚举
    了解到rust和WebAssembly的结合使用,可以构建前端应用,而且性能也比较好。初步学习使用rust是预编译静态类型语言。安装rust官网下载rust-CN,大致了解下为什么选择:高性能、可靠性、生产力。打开控制台啊,执行安装(mac系统,windwos或其他系统查看官网)&>curl--proto......
  • C#中使用using进行资源管理的的类型有哪些?
    在C#中,实现IDisposable接口的类型可以使用using语句进行资源管理,具体如下:1. System.IO.Stream:表示字节流的抽象类。它是所有文件I/O操作的基类,包括文件读取和写入。using(Streamstream=newFileStream("file.txt",FileMode.Open)){//使用stream对象进行文件读取操......
  • java的数据类型
    java中的数据类型分为:1.基本数据类型:boolean、byte、char、short、int、long、float、double注意:整数的默认类型是int;有小数的默认是double,所以在表示float时,应该在数值后加f。2.引用数据类型(言外之意是变量所指的空间是在堆中):数组、类、接口、NULL 引......
  • Rust学习笔记——基础篇3:数据类型
    数据类型整数类型位长度有符号无符号8-biti8u816-biti16u1632-biti32u3264-biti64u64128-biti128u128archisizeusize整数型的表述方式进制例十进制98_222十六进制0xff八进制0o77二进制0b1111_0000字节(只能......
  • 通过案列理解变量类型的应用场景
    packagecom.StaticDemo;publicclassTest1{publicstaticvoidmain(String[]args){//通过案列理解变量类型的应用场景Useru1=newUser();Useru2=newUser();Useru3=newUser();Useru4=newUser();S......
  • WEB漏洞—SQL注入之类型及提交注入
    本章包含所有sqli-labs-master测试,所以内容较少,更多内容在测试里GET,参考sqli-labs-matser(LESS-1到5)POST,参考sqli-labs-matser(LESS-11) COOKIE数据提交注入测试(sqli-labs-masterLESS-20)cookie注入原理:对get传递来的参数进行了过滤,但是忽略了cookie也可以传递参数。通过数......
  • 基于Go语言 K8s+gRPC实战云原生微服务开发
    基于Go语言K8s+gRPC实战云原生微服务开发download:3wzxit666com使用微服务架构实现高性能售票系统微服务架构是一种通过将一个大型应用程序拆分成更小和更可管理的部分来构建应用程序的方法。对于一个高性能的售票系统来说,使用微服务架构可以帮助解决一些挑战,如高负载处理能力、......
  • 【python基础】基本数据类型-字符串类型
    1.初识字符串字符串就是一系列字符。在python中,用引号括起来文本内容的都是字符串。其语法格式为:‘文本内容’或者“文本内容”我们发现其中的引号可以是单引号,也可以是双引号。这样的灵活性可以使我们进行引号之间的嵌套。编写程序如下所示:运行结果如下所示我们可以发现......
  • 云原生时代的Java
     Java最大的地基(护城河)是其极其强大的软件生态以及极其庞大的使用者人群。在云原生的时代下,Java的统治地位不仅没有到什么坚不可摧,无后顾之忧的程度,说Java目前处于危机四伏的地位都不为过。最根本的原因是,目前随着云原生时代的到来,有一些以前植入Java语言的基因之中的,很多的假......