泛型与Class类
来源:互联网 发布:战舰世界 个人数据 编辑:程序博客网 时间:2024/06/07 00:29
1 使用Class<T>泛型可以避免强制类型转换2 String.class的类型实际上是Class<String>3 如果Class对应的类暂时未知,就用Class<?>
//不用泛型的demopublic class ObjectFactory { public static Object getInstance(String name){ try { Class cls = Class.forName(name); return cls.newInstance(); } catch (ClassNotFoundException e) { e.printStackTrace(); return null; } catch (InstantiationException e) { e.printStackTrace(); return null; } catch (IllegalAccessException e) { e.printStackTrace(); return null; } }}public class Test extends Activity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); //需要强制类型转换 Date date = (Date) ObjectFactory.getInstance("java.util.Date"); }}
//使用泛型的demopublic class ObjectFactory2 {//注意泛型的写法,在方法中将返回类型Object变成<T> T public static <T> T getInstance(Class<T> cls){ try { return cls.newInstance(); } catch (InstantiationException e) { e.printStackTrace(); return null; } catch (IllegalAccessException e) { e.printStackTrace(); return null; } }}public class Test extends Activity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); //不需要强制转换 Date d = ObjectFactory2.getInstance(Date.class); }}
//ex:Array//使用Array类创建数组Object arr = Array.newInstance(String.class,10);//Array的newInstance()方法签名public static Object newInstance(Class<?> componentType,int... dimensions)//如果改成下面就可以使用泛型public static <T> T newInstance(Class<T> componentType,int length)
public class ArrayFactory { public static <T> T[] newInstance(Class<T> componentType, int length){ return (T[]) Array.newInstance(componentType,length); }}public class Test extends Activity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); //一维 String[] strings = ArrayFactory.newInstance(String.class,5); strings[0] = "疯狂java讲义"; //二维 int[][] ints = ArrayFactory.newInstance(int[].class,10); ints[1] = new int[]{22,33}; Log.d("shj--","str "+strings[0]+" ints "+ints[1].toString()); }}
阅读全文
0 0
- 泛型与Class类
- 反射与Class类
- 对象与类class
- Class类与反射
- java中的Class类与Class对象
- 类名.class与Class.forName(),class.getClassLoader()
- Class类与Object类
- Class类与 Reflect Api
- Class类与映射API
- 黑马程序员-CLASS与类
- Class类,反射与注解
- Class类与JAVA反射
- Class类概述与使用
- Class类与java反射
- 原始类型.Class 及 Class.forName(String class) 与 类名.class 的区别
- Class<?>与Class<T>
- Java —— Object、Class、泛型与集合
- java类相等测试(equals)与Class.class.getClass()
- C#观察者模式
- 神奇6位数--蓝桥杯国赛j历年真题
- Ubuntu16.04安装redis和php的redis扩展
- 深入分析Docker镜像原理
- 斐波那契数列java实现
- 泛型与Class类
- Cyclic Nacklace
- 改坏了/etc/profile后的解决方法
- [笔记分享] [Display] LCD接口介绍
- java多线程什么时候释放锁—wait()、notify()
- Spring使用远程服务之Hessian
- JSON基础
- git merge 和 git rebase 小结
- android 各国语言对应的缩写