读书人

java的泛型如何做

发布时间: 2013-06-19 10:26:41 作者: rapoo

java的泛型怎么做
我有一个.NET写的东西要转为java的,在泛型这边遇到不少麻烦。麻烦懂java的人告诉下
像C#语法中,接口可以定义返回泛型类型,在java中要怎么实现,关键他也不是泛型的接口。


public interface IActionUtils
{
bool Execute(string sqlStr);

int[] Execute(string[] sqlArr);

DataTable Query(string sqlStr);

DataTable Query(string table, string fields, string condition, Pager pager);

DataTable QueryPage(string table, string fields, string condition, Pager pager, ref int totalRecords);

T QueryEntity<T>(string sqlStr) where T : class, new();
IList<T> QueryEntities<T>(string sqlStr) where T : class, new();

IList<T> QueryEntities<T>(string table, string fields, string condition, Pager pager) where T : class, new();

bool Add(object obj);

bool Update(object obj);

IList<T> QueryEntities<T>(string table, string fields, string condition, Pager pager, ref int totalRecords) where T : class, new();
}

[解决办法]
public  <T extends Object> T get(){
return (T)new StringBuffer("test");
}

public <T> List<T> getList(){
return new ArrayList<T>();
}

[解决办法]
引用:
@Override
public <T> T QueryBean(String sql) {
// 在这里有无办法构造出一个T的实例
//像.NET的 T t= new T();,若是要返回一个空的T实例,要如何new Instance出来?
//或者能不能获取到class的名称,例如 t.getClass().getName().toString();只要知道类名,也可以reflect回来
return null;
}


为了兼容低版本jdk,java的泛型在编译后会被擦除,我们无法使用T.class的方式动态的获取一个泛型对象Class。
建议转换为
Object QueryBean(String classPath){
Object obj = null;
try {
Class clazz = Class.forName(classPath);
obj = clazz.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();


} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return obj;
}


得到的Object对象,在调用处判断:obj instance of XXX,然后强转。

读书人网 >J2SE开发

热点推荐