Java和泛型
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java和泛型,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2368字,纯文字阅读大概需要4分钟。
内容图文
![Java和泛型](/upload/InfoBanner/zyjiaocheng/791/9b27a36c15b74028a4347cafdc7c88bf.jpg)
我是java的新手,如果我完全错误的话,我会道歉.
我正在尝试编写一个通用的(在英语意义上的单词!)数据访问类.
我目前有:
public class DA<T> {
public static Dao getAccountDao() throws NamingException, SQLException {
Context ctx = new InitialContext();
DataSource dataSource = (DataSource)ctx.lookup("java:comp/env/jdbc/test");
ConnectionSource connectionSource = new DataSourceConnectionSource(dataSource, new MysqlDatabaseType());
Dao<Account, Integer> accountDao = DaoManager.createDao(connectionSource, Account.class);
return accountDao;
}
}
我可以这样称呼:
Dao<Account, Integer> accountDao = DA.getAccountDao();
但我需要为每个Dao /型号提供一个版本.所以我试图做一些可以被称为的东西:
Dao<SomeClass, Integer> someClassDao = DA.getDao(SomeClass);
这甚至可能吗?
我尝试过这样的事情:
public class DA {
public static Dao getDao(<T>) throws NamingException, SQLException {
Context ctx = new InitialContext();
DataSource dataSource = (DataSource)ctx.lookup("java:comp/env/jdbc/test");
ConnectionSource connectionSource = new DataSourceConnectionSource(dataSource, new MysqlDatabaseType());
Dao<T, Integer> accountDao = DaoManager.createDao(connectionSource, T.class);
return accountDao;
}
}
但Netbeans给出了错误:非法启动类型
我的大脑正在与仿制药斗争,这是他们可以做的事情吗?!
编辑:在下面的帖子的帮助下,我必须:
public class DA<T> {
public static Dao<T, Integer> getDao(T daoType) throws NamingException, SQLException {
Dao<T, Integer> accountDao = DaoManager.createDao(T.class);
return accountDao;
}
}
这会产生两个错误:
非静态类型变量T不能从静态上下文引用
如果我删除static关键字,我得到:
无法从类型变量中进行选择
我需要了解泛型和静态如何协同工作,但第二个看起来像是擦除的结果(http://www.coderanch.com/t/386358/java/java/Converting-type-parameters-class),所以不确定它是否可能.
应该在前面提到过,Dao的东西是使用一个名为ORMLite的ORM库,所以createDao等不是我的代码.
解决方法:
要访问T.class的意思,您必须将类对象传递给方法:
class Account {}
class Dao<TEntity, TId> {}
class DA {
// your DaoManager.createDao() will also need a similar signature
public static <TEntity> Dao<TEntity, Integer> getDao(Class<TEntity> daoType) {
/// yadda blah, create DAO as appropriate
return new Dao<TEntity, Integer>();
}
}
public class Test {
public static void main(String[] args) {
// Pass the class literal for what you want TEntity to be as a parameter
Dao<Account, Integer> dao = DA.getDao(Account.class);
}
}
内容总结
以上是互联网集市为您收集整理的Java和泛型全部内容,希望文章能够帮你解决Java和泛型所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。