泛型是否可以放其他类型_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 泛型是否可以放其他类型

泛型是否可以放其他类型

 2017/6/22 5:37:46  神绮_H_亚里亚  程序员俱乐部  我要评论(0)
  • 摘要:不知道大家对于java泛型是怎么理解的?大家认为泛型到底有什么作用了?泛型只能存放指定类型的数据,底层对此进行了处理,我们只能对存取指定类型的数据很多人一定是这么理解的吧,但实际上并不是哦,泛型只是为了规范在编译的时候对泛型做了判断,为了方便我们存取,减少编程错误,其实底层编译成字节码的时候并没有任何泛型,和jdk1.5之前其实是没区别的,如果我们绕开编译,那完全可以存放其他类型的数据如何绕开,我们可以利用反射,大家看看下面的代码packagea;importjava.util
  • 标签:其他 泛型

不知道大家对于java泛型是怎么理解的?

大家认为泛型到底有什么作用了?

泛型只能存放指定类型的数据,底层对此进行了处理,我们只能对存取指定类型的数据

很多人一定是这么理解的吧,但实际上并不是哦,泛型只是为了规范在编译的时候对泛型做了判断,为了方便我们存取,减少编程错误,其实底层编译成字节码的时候并没有任何泛型,和jdk1.5之前其实是没区别的,如果我们绕开编译,那完全可以存放其他类型的数据

如何绕开,我们可以利用反射,大家看看下面的代码

class="java" name="code">package a;

import java.util.ArrayList;
import java.util.List;

public class A {
	public A(String s) {
		slist.add(s);
	}
	private List<String> slist = new ArrayList<>();
	public List<String> getSlist() {
		return slist;
	}
	public void setSlist(List<String> slist) {
		this.slist = slist;
	}
	
}

?首先我们定义了这么一个类,里面有一个带着泛型的list

然后

package a;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.List;


public class B {
	public static void main(String[] args) throws Exception {
		A a1 = new A("测试数据");
		Class clazz =Class.forName("a.A");
		Method m =clazz.getMethod("getSlist", null);
		List la = (List) m.invoke(a1, null);
		la.add(new ben());
		
		List la1=(List) m.invoke(a1, null);
		System.out.println(la1);
	}
	
}
class ben{
	int i=1;
	String s="4";
	@Override
	public String toString() {
		return "ben [i=" + i + ", s=" + s + "]";
	}
	
}

?大家觉得最后打印的结果是什么呢

[测试数据, ben [i=1, s=4]]

?结果是这样的,你没看错,我在泛型为String的集合里面放了一个自定义的类,如果泛型的编译的时候真的做了处理,那么在la.add(new ben());这一句的时候应该抛出类型转换异常

怎么样,是不是大吃一惊,发现和自己知道的完全不一样?(大神请无视)

?

?

发表评论
用户名: 匿名