java的泛型怎么做

不訴離傷 2013-06-06 11:21:58
我有一个.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();
}
...全文
148 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
不訴離傷 2013-06-07
  • 打赏
  • 举报
回复
引用 2 楼 oh_Maxy 的回复:
[quote=引用 1 楼 xieyijun1986 的回复:] T QueryEntity<T>(string sqlStr) where T : class, new(); 这个方法。
这个方法想实现什么功能?[/quote] 返回一个bean
oh_Maxy 2013-06-07
  • 打赏
  • 举报
回复
引用 1 楼 xieyijun1986 的回复:
T QueryEntity<T>(string sqlStr) where T : class, new(); 这个方法。
这个方法想实现什么功能?
不訴離傷 2013-06-07
  • 打赏
  • 举报
回复
@Override public <T> T QueryBean(String sql) { // 在这里有无办法构造出一个T的实例 //像.NET的 T t= new T();,若是要返回一个空的T实例,要如何new Instance出来? //或者能不能获取到class的名称,例如 t.getClass().getName().toString();只要知道类名,也可以reflect回来 return null; }
不訴離傷 2013-06-07
  • 打赏
  • 举报
回复
引用 4 楼 sd4000784 的回复:
public  <T extends Object> T get(){
		return (T)new StringBuffer("test");
	} 
	
	public <T> List<T> getList(){
		return new ArrayList<T>();
	}


public interface IActionUtils {
	
	Boolean Execute(String sql);
	
	ResultSet Qurey(String sql);
	
	<T extends Object> T QueryBean(String sql);
	
	<T extends Object> List<T> QueryBeans(String sql);
}

public class OracleActionUtils implements IActionUtils {

	@Override
	public Boolean Execute(String sql) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public ResultSet Qurey(String sql) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public <T> T QueryBean(String sql) {
		// 在这里有无办法构造出一个T的实例
                //像.NET的  T t= new T();,若是要返回一个空的T实例,要如何new Instance出来?
		return null;		
	}

	@Override
	public <T> List<T> QueryBeans(String sql) {
		// TODO Auto-generated method stub
		return null;
	}

}

  • 打赏
  • 举报
回复
public  <T extends Object> T get(){
		return (T)new StringBuffer("test");
	} 
	
	public <T> List<T> getList(){
		return new ArrayList<T>();
	}
oh_Maxy 2013-06-07
  • 打赏
  • 举报
回复
引用 6 楼 xieyijun1986 的回复:
@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,然后强转。
不訴離傷 2013-06-06
  • 打赏
  • 举报
回复
T QueryEntity<T>(string sqlStr) where T : class, new(); 这个方法。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧