- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在实用程序界面的文档中 Types ,其中一个实例必须由编译器提供给 Java SE 6 或 7 的注释处理器,对于我正在处理的代码片段,有两种方法让我感兴趣。我需要检查字段的类型是否是从特定抽象类继承的类型。似乎适用的两种方法是 isAssignable
和 isSubtype
.但我不确定要使用其中的哪一个。
我已经检查了上述文档中引用的 Java 语言规范的那些部分。我理解子类型和赋值转换概念之间的区别(至少我认为我理解)。除非我弄错了,否则 java.lang.Short
不会是原语 long
的子类型(子类型是在原语之间定义的,但不是跨类和原语定义的),但是由于拆箱和扩大转换,它可以像这样分配:
final Short s = 0;
final long l = s;
但是,我仍然不确定对我来说最好的方法是什么。检查子类型似乎比可分配性更严格和更可取,但是当涉及到类时,感觉好像一个自动暗示另一个。
长版短版:当比较的 TypeMirrors 都是类(不是接口(interface)或枚举)时,isAssignable
和 isSubtype
是否等价?
最佳答案
如果我们采用引用赋值,在这种情况下唯一适用的转换是扩大引用转换(当然,身份转换除外)。现在我们有以下规则来执行它:
A widening reference conversion exists from any type S to any type T, provided S is a subtype (§4.10) of T.
这意味着如果您只考虑类,那么无论您谈论子类型还是可分配性都没有关系。所以是的,上述方法在这种情况下是等效的。
关于java - TypeMirror 的 isSubtype 和 isAssignable 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7756538/
我在使用 Types.isAssignable() 时遇到问题来自注释处理 API。我有这两个变量: TypeMirror someType; // with some value TypeMirro
在使用 Java 6 API 编写注释处理器时,我遇到了以特定方式处理所有 map 的需求,但我显然误解了 API 的目的或调用方式。这是让我不开心的代码: import javax.lang.mod
在实用程序界面的文档中 Types ,其中一个实例必须由编译器提供给 Java SE 6 或 7 的注释处理器,对于我正在处理的代码片段,有两种方法让我感兴趣。我需要检查字段的类型是否是从特定抽象类继
我是一名优秀的程序员,十分优秀!