当前位置:  开发笔记 > 编程语言 > 正文

使用Class <?>而不是Class作为方法参数类型有什么好处?

如何解决《使用Class<?>而不是Class作为方法参数类型有什么好处?》经验,为你挑选了1个好方法。

注意:这不是我已经链接到下面的问题的重复.我很明显在发布前先阅读了这个问题/答案,但没有以任何形式回答我的问题.

这个链接的问题确实更详细地解释了泛型类存在的原因.但是,在我的情况下,我没有特别回答Class的好处.

类Class 的通用性质是什么意思?什么是T?

我编写了一个实用程序方法,它接受类型为Class的参数'cl'并使用cl.isInstance(objectInstance)方法执行逻辑.

但是我见过使用通用通配符声明参数的示例代码Class.

为什么不使用没有通用通配符的Class?Class不能代表所有可能的类类型,包括泛型吗?如果Class在我的情况下使用有什么好处?

现有相关问题(见下文)中接受的答案实际上并没有提供有用的答案.

Class <?>在Java中意味着什么?



1> Holger..:

主要区别在于代码(读者)的(自我)文档.声明为的变量Class:"此Class实例表示的实际类型未知或在编译时无法表示,我知道".与此相反的类型Class说:"我不使用泛型这里",也许,因为你不知道Class是通用的,或者你是一个有点草率,不明白之间的差别ClassClass,或者这是很老的预 - 泛型代码.

具有的代码后果.例如

Class unknownType=Object.class;
Class string=unknownType;

当您将明确未知的类型分配给声明已知类型的变量时,会产生编译时错误.

相反

Class nonGenericType=Object.class;
Class string=nonGenericType;

只会在执行非通用(即未经检查)操作时生成(可抑制的)警告.

关于你可以用一个Class对象做什么,除了赋值之外,没有区别,因为当你用它来创建一个新实例时,返回引用的编译时类型将是最抽象的类型java.lang.Object,案例.如果Class方法接收与类型参数相关的参数,则会出现差异,因为您无法为未知类型调用此类方法Class(它与尝试将元素插入到a中List的方法相同),而您可以调用此类方法取消选中在原始Class实例上.但由于没有这样的方法,因此Class和之间的功能没有区别Class.

尽管如此,您仍应始终使用Class以确保不会发生意外的未经检查的操作,如上面所示的分配.如果使用Class不产生编译器警告,则应检查如何(重新)启用它们.如果编译器以静默方式忽略原始类型或未经检查的操作,则可能存在其他类型的问题,而不是Class隐藏在某处.

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有