首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >当参数化类型通过层次结构时,在Java中创建泛型类型的实例?

当参数化类型通过层次结构时,在Java中创建泛型类型的实例?
EN

Stack Overflow用户
提问于 2013-08-31 20:06:56
回答 4查看 2.8K关注 0票数 1

我一直在阅读问题的答案:

在Java中创建泛型类型的实例?

我已经执行了Lars Bohl建议的方法。我对他的代码作了如下修改:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public class ParameterizedTypeEg<E> {
    public Class<E> getTypeParameterClass() {
        Type type = getClass().getGenericSuperclass();
        ParameterizedType paramType = (ParameterizedType) type;
        return (Class<E>) paramType.getActualTypeArguments()[0];
    }
    private static class StringHome extends ParameterizedTypeEg<String> {
        private String _string;
        StringHome (String string) {
            _string = string;
        }
    }
    public static void main(String[] args)
        throws InstantiationException, IllegalAccessException {
        String str = new StringHome("my string").getTypeParameterClass().newInstance();
        String str2 = new ParameterizedTypeEg<String>().getTypeParameterClass().newInstance();
    }
}

这种方法对于str变量很好。然后创建str2,其类型在我看来是相同的(ParameterizedTypeEg < String >,这与StringHome基本上是一样的)。但是,这种方法不适用于str2,当我尝试强制转换(ParameterizedType)类型时,会引发ClassCastException。

即使对于str2,我已经用字符串参数化了ParameterizedTypeEg,但是getGenericSuperclass()返回与str非常不同的内容。此外,在方法中,str2将'this‘显示为ParameterizedTypeEg,而对于str,'this’是参数化的this$StringHome。我想这就是问题的根源。为什么Java没有看到泛型类型也是为str2确定的?

当参数化类型通过多个层次结构传递时,我遇到了相同的问题吗?也就是说,类B< T>包含A< T>并且我实例化了B。在A中,我不能通过使用上述方法确定参数化A的类型来创建字符串对象。这种方法在包含层次结构的情况下也会产生异常。这给我带来了一个问题,因为我希望能够通过多个级别的包容和/或继承传递参数化类型,并且在所有情况下都使用相同的方法生成泛型类型的实例。

谢谢,约翰

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-08-31 21:12:58

通过以下更改,您的代码将工作:

从…

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  String str2 = new ParameterizedTypeEg<String>().getTypeParameterClass().newInstance();

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   String str2 = new ParameterizedTypeEg<String>(){}.getTypeParameterClass().newInstance();

这将创建一个匿名的ParameterizedTypeEg子类。当你打电话的时候

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
getClass().getGenericSuperclass();

在StringHome上,您将得到一个ParameterizedTypeEg < java.lang.String>,这正是您想要的。如果您像以前一样创建str2,则该调用只返回对象,因此将其转换为paremeterized的尝试失败:

线程"main“java.lang.ClassCastException中的异常:不能将java.lang.Class转换为java.lang.reflect.ParameterizedType

创建匿名子类使返回ParameterizedTypeEg < java.lang.String>

这与Google库中的类型标记类使用的技巧相同。例如,你写

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new TypeToken<List<String>>() {}

而不是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 new TypeToken<List<String>>()  
票数 1
EN

Stack Overflow用户

发布于 2013-08-31 20:54:37

getClass().getGenericSuperclass();向您提供了超类的详细信息。因此,只有在子类为参数化超类时,它才能工作。如果实例化给定类型参数的参数化超类,它将无法工作。

票数 0
EN

Stack Overflow用户

发布于 2013-08-31 21:14:17

但是,该方法不适用于str2,当我尝试强制转换(ParameterizedType)类型时,会引发ClassCastException .为什么Java没有看到泛型类型也是为str2确定的?

如oracle中为ParameterizedType指定的

ParameterizedType表示参数化类型(如Collection<String> )。

但是,ParameterizedTypeEg的超类是对象,而不是泛型类型。因此,由Type返回的getClass().getGenericSuperclass();是对象本身的Class。对ParameterizedType的非参数化类型的类型转换是为str提供ClassCastException

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18555122

复制
相关文章
Hinton取得新进展,以更少数据识别图像
谷歌人工智能先驱Geoffrey Hinton公布了AI技术进展,可提高电脑正确识别图像的速度和较少的数据依赖。 Google公司公布了关于其人工智能先驱Geoffrey Hinton技术的进展。该技术提高了计算机识别图像的速度,且只需要较少的数据。Hinton是一位科研人员,他在人工神经网络方面的工作被看成机器学习商业化的基础。上个星期他在学术网站上匿名发表了两篇研究论文,详细介绍了这种被称为胶囊网络的方法。这种方法可能意味着电脑会能够识别与图像库中的已知图像有不同拍摄角度的照片。它也可以被应用于语音和视
人工智能快报
2018/03/15
5750
中科院化学所刘冰JACS:高分子胶体可控合成研究取得进展
盘状胶体作为典型的各向异性胶体之一,是自组装构建复杂层级结构的理想单元,也是研究自组装、玻璃化转变、扩散、颗粒流变学、介晶相行为中许多基本物理化学问题的有效模型。目前,合成单分散、形状可控、表面化学清晰的高分子盘状胶体仍缺少普适性方法。
JoJo_Beatles
2021/03/11
7400
中科院化学所刘冰JACS:高分子胶体可控合成研究取得进展
以写代学:python 错误、异常、断言
     语法错误指示软件的结构上有错误,导致不能被解释器解释或编译器无法编译。这些错误必须在程序执行前纠正。
py3study
2020/01/15
7200
pycharm安装库老是失败_申报状态已申报未导入
在pycharm中每一个project都可以有一个属于自己的库,在创建新project的时候会给到一个新的库,这个时候的话就有可能会出现安装过的库报错,还需要重新安装的问题。 如果不是创建一个大工程的话可以把这个工程的库的路径指向默认的文件夹,然后在默认的文件夹中安装常用的库,然后小脚本之类的就指向这个文件夹,这样子就不用下次重新安装库了。
全栈程序员站长
2022/09/27
6150
pycharm安装库老是失败_申报状态已申报未导入
业绩超预期因子
学术界很早就发现,股票市场存在显著的盈余公告后的价格偏移现象(Post-Earnings Announcement Drift PEAD)。通俗解释来说,投资者对于公司的盈利有一个预期值,如果财报公布后,公司的实际盈利超出了投资者预期,公司的股价会上升,会有明显的超额收益。如果实际盈利低于投资者预期,公司股价会下降,会有明显的负向收益。本文基于这一现象构造盈利超预期因子,并对因子进行测试。后台回复“业绩超预期”获取代码和参考文献,限时免费。
量化小白
2020/03/18
2.9K0
业绩超预期因子
企业家的优势:.icu如何推动小型企业以取得在线的成功
在当今的数字时代,建立强大的在线形象对于小型企业的蓬勃发展来说是至关重要的。随着竞争的加剧和消费者行为的不断变化,企业家需要一种强大的工具来使他们脱颖而出。这就是 .icu 域扩展发挥作用的地方。在本文中,我们将探讨 .icu 如何赋能企业家并推动小型企业在线取得成功。
腾讯云DNSPod团队
2023/07/24
3910
企业家的优势:.icu如何推动小型企业以取得在线的成功
高企申报很简单,高企云自助申报高企专题
6月到8月是申报高企认定的时间,很多企业都不知道怎么申报高企认定,为此,高企云小编专门制作了一个有关高企认定的专题,想自己申报高企认定的可以看看。下面是高企认定专题的主要内容简介,有兴趣的可以去看看。
高新企业认定网
2018/06/11
7770
高企申报很简单,高企云自助申报高企专题
以时间为尺,丈量AI价值 -「AI中国」机器之心2022年度奖项申报正式启动
在过去的十几年中,我们看到人工智能技术的突破层出不穷,产业应用遍地开花;我们同样也经历了疫情冲击,遭受了技术封锁,目睹了一批创业公司的倒下。 人工智能的发展并非一帆风顺,但研究者、从业者、创业者们仍在披荆斩棘,未曾停下脚步。时光不负有心人,近年来严酷的考验无法打败真正优秀的、理性的人工智能企业;而人工智能对技术和产业的价值也将在磨砺下风云会合,展现光辉。 伴随人工智能技术发展,国家及地方政策推动,智能汽车渗透率正在快速提升。更多科技企业、互联网公司的加入,则不断为智能汽车产业带来新的思想和理念。而各行各业
机器之心
2022/08/31
3120
以时间为尺,丈量AI价值 -「AI中国」机器之心2022年度奖项申报正式启动
华盛顿大学 | 模型优化新方法!以任务向量为中心,编辑模型生成预期效果(含源码)
 在开发机器学习系统时,提高模型在下游任务上的表现或减少在预训练中学习到的偏见,一种常见的方法是对预训练模型做人为干预引导。为此,本文提出了一种以任务向量为中心来引导神经网络产生预期结果的新范式。
ShuYini
2023/03/06
4860
华盛顿大学 | 模型优化新方法!以任务向量为中心,编辑模型生成预期效果(含源码)
怎样取得文件行数
perl -ne 'END {print "$i"} ++$i' filename
一见
2018/08/07
1.4K0
Python高分书籍推荐
网上有很多书籍,但是有的太过老旧,使用的是已经弃用的Python2版本;有的写得太过繁琐,缺少实用性。我从高分图书中筛选了下面这些优秀的Python书籍,推荐给大家。
一只大鸽子
2022/12/06
1.2K0
Python高分书籍推荐
识别最优的数据驱动特征选择方法以提高分类任务的可重复性
在机器学习研究中,特征选择是十分重要的一个环节。很多脑影像机器学习研究者更多追求的是所选特征的预测精度,而本文的作者更关注所选特征的可重复性。作者提出的基于图论的FS-Select算法,在挑选出具有可重复性特征的同时,兼顾了其预测准确性。该研究由土耳其伊斯坦布尔科技大学的Nicolas Georges 等人发表在最近的Pattern Recognition杂志上。
用户1279583
2020/02/25
1.1K0
技术专利申报经验分享
最近的重点工作是专利申报,借这里和大家分享一下心得。 >>什么是专利: >>如何查询专利: >>如何申请专利: >>案例分析:
物流IT圈
2019/07/16
4380
技术专利申报经验分享
美光警告:裁员人数将高于预期,本季毛利率可能低于预期!
3月4日消息,据多家外媒报道,存储芯片大厂美光(Micron)警告称,受到产业供给过剩影响,公司裁员人数恐怕会比先前披露的还多,第三季(3-5 月)毛利率也很可能逊于高层原本预期。
芯智讯
2023/03/24
2230
美光警告:裁员人数将高于预期,本季毛利率可能低于预期!
ORDER BY导致未按预期使用索引
在MySQL中经常出现未按照理想情况使用索引的情况,今天记录一种Order by语句的使用导致未按预期使用索引的情况。
俊才
2019/11/28
2.7K0
node_modules / rxjs / internal / types.d.ts中的错误(81,44):错误TS1005:';' 预期。 node_modules / rxjs / int...
ng new ngx-doc 关于使用ng创建出的新项目报如下错: ERROR in node_modules/rxjs/internal/types.d.ts(81,44): error TS1005: ';' expected. node_modules/rxjs/internal/types.d.ts(81,74): error TS1005: ';' expected. node_modules/rxjs/internal/types.d.ts(81,77): error TS1109: Expre
用户1437675
2019/03/06
3.8K0
高分通过!TCE高分通过密码应用安全性评估(3级)
仅90余天,借助腾讯安全云鼎实验室的商用密码合规解决方案,腾讯专有云企业版Tencent Cloud Enterprise(Tencent TCE)于2021年11月高分通过第三方密评机构的密码应用安全性评估(3级标准)。
腾讯安全
2022/01/18
2.2K0
高分通过!TCE高分通过密码应用安全性评估(3级)
高分通过,再创佳绩
腾讯重庆云计算数据中心 2021年Q4 近日,重庆腾讯云计算数据中心顺利通过全球数据中心标准认证机构Uptime Institute的 M&O运维认证,成为腾讯继天津滨海数据中心后第二个获此认证的自建数据中心。 重庆腾讯云计算数据中心位于重庆市两江水土国际数据港,是腾讯在国内的第二个大型自建数据中心。重庆腾讯云计算数据中心一期于2018年建成并启动运营,陆续为百余家国内外知名企业提供了云服务。2020年,重庆腾讯云计算数据中心正式启动二期建设,整体建成后将具备20万台服务器的运算存储能力,关联
腾讯数据中心
2021/12/16
5580
高分系列卫星详细介绍
高分专项启动实施8年来,高分卫星数据已替代进口,自给率达80%,突破了长期依赖国外数据的局面,本期详细介绍下高分系列卫星。
疯狂学习GIS
2023/07/09
7.3K0
高分系列卫星详细介绍
Serverless比你预期要贵得多
作者 | COLIN CHARTIER 译者 | 张健欣 策划 | 万佳 在运营一个持续集成(CI)公司多年后,你会发现架构决策中的许多隐藏成本。在本文,我想谈谈 Serverless 和它的主要替代方案——微服务(容器化)架构,它们之间的实际区别。 1架构介绍:Serverless 和容器 +CDN 我们在过去几年看到的新产品中的绝大多数后端架构都属于这两者之一。  Serverless Serverless核心思想是指定一个策略来创建新的 Web 服务器,而不是自己启动它们。这样一来,如果你的产品在某个
深度学习与Python
2023/04/01
5570
Serverless比你预期要贵得多

相似问题

如何快速解决预期的申报错误?

11

团结-我怎样才能取得高分?

22

如何用雪碧套件和迅捷在比赛中取得高分

10

骰子申报错误

31

错误地使用远期申报?

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文