首页 / JAVA / java – 通过泛型投射
java – 通过泛型投射
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 通过泛型投射,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1160字,纯文字阅读大概需要2分钟。
内容图文
![java – 通过泛型投射](/upload/InfoBanner/zyjiaocheng/811/5b5d6dce3fe24ce5ac6130c087392a3d.jpg)
有没有办法转换对象以返回方法的通用值?我试过这种方式但发生了Casting异常:
public <S extends Super> S get(Class<S> clazz) {
return (S) new Super();
}
public class Super {
}
public class Sub1 extends Super {
}
public class Sub2 extends Super {
}
例外:
java.lang.ClassCastException:
Cannot cast com.zarinak.app.model.Super to com.zarinak.app.model.Sub1
有办法吗?
解决方法:
您尝试将新Super对象强制转换为已扩展它的对象类型的方式不正确.
假设您要创建一个Sub1对象 – 使用Super类中的构造函数实例化一个Super对象,然后告诉编译器该对象实际上是Sub1,它不是;它既不包含Sub1特定的方法或变量,也不使用Sub1构造函数构造.编译器知道该对象不是Sub1,并且会在运行时抛出错误.虽然这可能不是代码当前结构的问题,但是当Sub1包含Super不包含的方法或变量时,它将成为问题.如果编译器允许这种形式的转换,那么尝试在轨道上调用这些方法将是一个重要问题.
这将实现你想要的.通过将S泛型类型约束为Super的扩展,您可以有效地绕过实例化Super对象并从那里进行强制转换.
public <S extends Super> S get(Class<S> clazz) throws IllegalAccessException, InstantiationException {
S s = clazz.newInstance();
return s;
}
将此作为一种方法,没有任何额外的身体,几乎完全没有意义,你也可以调用clazz.newInstance().但是,这确实确保了对象的类扩展了Super.
内容总结
以上是互联网集市为您收集整理的java – 通过泛型投射全部内容,希望文章能够帮你解决java – 通过泛型投射所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。