泛型方法+反射,解决静态可变类参数问题
2012-11-18 22:06
323 查看
问题描述:略
问题分析:略
具体代码如下:
Base是Lesson和Result的基类
public class Base {
public static Base parse(String str) {
return new Base();
}
}
Lesson
public class Lesson extends Base{
public static Lesson parse(String str){
return new Lesson();
}
}
Result
public class Result extends Base {
public static Result parse(String str) {
return new Result();
}
}
BaseList是LessonList和ResultList的基类
public class BaseList {
public static <BaseListT, BaseT> BaseListT parse(String str,
Class<BaseListT> listClass, Class<BaseT> itemClass)
throws SecurityException, NoSuchMethodException, IllegalArgumentException,
IllegalAccessException, InvocationTargetException,
InstantiationException {
BaseListT baseList = (BaseListT) listClass.newInstance();
List<BaseT> list = new ArrayList<BaseT>();
Method method = itemClass.getMethod("parse",
new Class[] { String.class });
for (int i = 0; i < 10; i++) {
BaseT base = (BaseT) method.invoke(itemClass, str);
System.out.println(base.getClass().getName());
list.add(base);
}
System.out.println(baseList.getClass().getName());
return baseList;
}
}
LessonList
public class LessonList extends BaseList {
public static LessonList parse(String str) throws SecurityException,
IllegalArgumentException, NoSuchMethodException,
IllegalAccessException, InvocationTargetException, InstantiationException {
return (LessonList) BaseList.parse(str, LessonList.class,
Lesson.class);
}
}
ResultList
public class ResultList extends BaseList {
public static ResultList parse(String str) throws SecurityException,
IllegalArgumentException, NoSuchMethodException,
IllegalAccessException, InvocationTargetException, InstantiationException {
return (ResultList) BaseList.parse(str, ResultList.class,
Result.class);
}
}Test类测试类
public class Test {
public static void main(String args[]) throws SecurityException,
IllegalArgumentException, NoSuchMethodException,
IllegalAccessException, InvocationTargetException,
InstantiationException {
LessonList.parse("dfd");
ResultList.parse("dfd");
}
}
问题分析:略
具体代码如下:
Base是Lesson和Result的基类
public class Base {
public static Base parse(String str) {
return new Base();
}
}
Lesson
public class Lesson extends Base{
public static Lesson parse(String str){
return new Lesson();
}
}
Result
public class Result extends Base {
public static Result parse(String str) {
return new Result();
}
}
BaseList是LessonList和ResultList的基类
public class BaseList {
public static <BaseListT, BaseT> BaseListT parse(String str,
Class<BaseListT> listClass, Class<BaseT> itemClass)
throws SecurityException, NoSuchMethodException, IllegalArgumentException,
IllegalAccessException, InvocationTargetException,
InstantiationException {
BaseListT baseList = (BaseListT) listClass.newInstance();
List<BaseT> list = new ArrayList<BaseT>();
Method method = itemClass.getMethod("parse",
new Class[] { String.class });
for (int i = 0; i < 10; i++) {
BaseT base = (BaseT) method.invoke(itemClass, str);
System.out.println(base.getClass().getName());
list.add(base);
}
System.out.println(baseList.getClass().getName());
return baseList;
}
}
LessonList
public class LessonList extends BaseList {
public static LessonList parse(String str) throws SecurityException,
IllegalArgumentException, NoSuchMethodException,
IllegalAccessException, InvocationTargetException, InstantiationException {
return (LessonList) BaseList.parse(str, LessonList.class,
Lesson.class);
}
}
ResultList
public class ResultList extends BaseList {
public static ResultList parse(String str) throws SecurityException,
IllegalArgumentException, NoSuchMethodException,
IllegalAccessException, InvocationTargetException, InstantiationException {
return (ResultList) BaseList.parse(str, ResultList.class,
Result.class);
}
}Test类测试类
public class Test {
public static void main(String args[]) throws SecurityException,
IllegalArgumentException, NoSuchMethodException,
IllegalAccessException, InvocationTargetException,
InstantiationException {
LessonList.parse("dfd");
ResultList.parse("dfd");
}
}
相关文章推荐
- Day 07 debug调试 junit单元测试 jdk5.0新特性 泛型,枚举,静态导入,拆装箱,增强for,可变参数 反射
- 解决C#中dynamic类型作为泛型参数的反射问题
- 黑马程序员—反射调用main方法的问题总结(涉及可变参数)
- .Net反射技术应用解决对象不同版本方法不同参数的问题
- 黑马程序员—反射调用main方法的问题总结(涉及可变参数)(反射参数是一个数组的函数要小心)
- Net反射技术应用解决对象不同版本方法不同参数的问题 【转载】
- Net反射技术应用解决对象不同版本方法不同参数的问题(转)
- Net反射技术应用解决对象不同版本方法不同参数的问题
- 利用反射,泛型,静态方法快速获取表单值到Model。
- 解决浏览器自动填充的问题,以及前者引起的serialize()方法序列号参数重复的问题
- 利用反射,泛型,静态方法快速获取表单值到Model。(转)
- C#通过反射调用泛型参数方法介绍
- 静态编译libcairo.a的时候遇到的依赖库的问题及解决方法
- jquery ajax传递中文参数乱码问题及解决方法说明
- SpringBank 开发日志 重新设计Action调用Service的参数传递 使用泛型解决类型转换问题
- 利用NSInvocation给NSObject添加一个分类方法,解决传递多参数问题
- Java可变参数方法重载时要注意的几个问题
- Struts2中使用OGNL表达式语言访问静态方法和静态属性以及我遇到的问题和解决方法
- C#中如何解决参数个数可变的问题
- Java泛型 通过反射获得方法参数中的变量类名和泛型