我使用isAssignableFrom()类方法来确定来自其他应用程序的类是否实现了接口。因此,我在"应用程序"中都有相同的界面。但不是在同一个包装中。当两个接口的包不相同时,该方法返回false,否则返回true。
这是正常行为吗?
答案 0 :(得分:2)
当两个接口的包不相同时,该方法返回false,否则返回true。
这是正常行为吗?
是即可。包名称是类(和interface
)名称的一部分。当接口在不同的包中时,它们具有不同的名称(因此不同)。
答案 1 :(得分:0)
此方法的JavaDoc
确定此Class对象表示的类或接口是否与指定的Class参数表示的类或接口相同,或者是它们的超类或超接口。如果是这样,它返回true;否则返回false。如果此Class对象表示基本类型,则如果指定的Class参数恰好是此Class对象,则此方法返回true;否则返回true。否则返回false。
具体来说,此方法测试是否可以通过标识转换或扩展引用转换将指定的Class参数表示的类型转换为此Class对象表示的类型。
有关详细信息,请参阅Java语言规范,第5.1.1和5.1.4节。
参数: cls - 要检查的Class对象 返回: boolean值,指示是否可以将类型为cls的对象分配给此类的对象
简而言之,只有在具有class = parameter true
的变量可以转换(赋值)给class = cls
的变量的情况下,该方法才会返回class
。
Set<Integer> set = new HashSet<>();
SortedSet<Integer> sortedSet = new TreeSet<>();
System.out.println(Set.class.isAssignableFrom(SortedSet.class)); // true
System.out.println(SortedSet.class.isAssignableFrom(Set.class)); // false
Set<Integer> set2 = sortedSet; // ok
SortedSet sortedSet2 = set; // compilation error
所以,它是关于方法本身的。
现在谈谈你的情况。你这么说:
因此我在&#34; application&#34;中都有相同的界面。但不在同一个包装中。
但是在契约而不是名义上,你有两个不同的接口。它们可能有相似的名称(但只是类似,因为包也是部分或类名),但它们真的是不同的类,它们不能被强制转换。哦,对不起,如果他们有相同的超类(他们扩展相同的界面),他们可以一个接一个地施放。
您可以通过将Set
和SortedSet
更改为您的界面来进行简单检查。