问答

关于 Type接口和ParameterizedType接口之间强转的疑问~!

作者:admin 2021-07-18 我要评论

看一个GenricDaoImpl代码时候存在一个疑问: Java code ? 1 2 3 4 5 6 7 8 9 10 public ? class ? GenricDaoImplT? `extends ? Serializable,?PK? `extends ? Se...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

看一个GenricDaoImpl代码时候存在一个疑问:

Java code?

1

2

3

4

5

6

7

8

9

10

public?class?GenricDaoImpl<T?`extends?Serializable,?PK?`extends?Serializable>

implements?GenricDao<T,?PK>?{

private?Class<?>?entityClass;?`//?实体类的类型`

public?GenricDaoImpl()?{

entityClass?=?(Class<?>)((ParameterizedType)?(`this`.getClass()

.getGenericSuperclass())).getActualTypeArguments()[`0`];

}

}

Java code?

1

2

Type?type?=?`this`.getClass().getGenericSuperclass();

ParameterizedType?parameterizedType?=?(ParameterizedType)type;

其中ParameterizedType接口是Type的子接口,Class类是Type实现类;

但是Class类并没有实现ParameterizedType接口,强转为什么没有报错;

Class类也没有重写getActualTypeArguments()方法;

我自写了一个类似的Demo,报了com.itany.C?cannot?be?cast?to?com.itany.B,代码如下:

Java code?

1

2

3

4

5

6

7

8

9

interface?A{}

interface?B?`extends?A{}`

class?C?`implements?A{}`

public?class?Main?{

public?static?void?main(String[]?args)?{

A?a=?`new?C();`

B?b=(B)a;

}

}

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 关于 Type接口和ParameterizedType接口

    关于 Type接口和ParameterizedType接口

  • 高德地图官网在IP定位下定位准确 但api

    高德地图官网在IP定位下定位准确 但api

  • nginx可以针对不同域名/路由限流吗?

    nginx可以针对不同域名/路由限流吗?

  • C盘下Programdata\config和Administrat

    C盘下Programdata\config和Administrat

腾讯云代理商
海外云服务器