HashSet 无法使用 instanceof 运算符转换为 String 错误

Sur*_*tti 1 java instanceof hashset

我有这些嵌套的哈希集,其中内部包含String值。

{{a,b},{b,c},{c,e}}

在我的代码中有一点,我不知道我是在处理内部哈希集还是外部哈希集。我试图通过使用以下代码行来确定:

System.out.println(loopIterator3.next() instanceof String);
 //(FYI :Iterator <HashSet> loopIterator3 = hsConc2.iterator();)
Run Code Online (Sandbox Code Playgroud)

这行代码似乎产生了一个错误:

prog.java:61: 错误:类型不兼容:HashSet 无法转换为 String System.out.println(loopIterator3.next() instanceof String);

loopIterator3确实遍历内部哈希集时,我希望它会采用字符串值。为什么编译器认为它是一个哈希集?此外,为什么编译器认为我正在尝试转换?

有什么想法/建议吗?

import java.util.Arrays;
import java.util.HashSet;

class Scratch {
    public static void main(String[] args) {
        HashSet<HashSet<String>> hashSets = new HashSet<>(Arrays.asList(newSet("a", "b"), newSet("b", "c"), newSet("c", "e")));

        System.out.println(hashSets.iterator().next() instanceof String); //error
        System.out.println(hashSets.iterator().next().iterator().next() instanceof String);
    }

    private static HashSet<String> newSet(String... str) {
        return new HashSet<>(Arrays.asList(str));
    }
}
Run Code Online (Sandbox Code Playgroud)

Tar*_*run 5

如果RelationalExpressionReferenceType 的强制转换会因为编译时错误而被拒绝,那么 instanceof 关系表达式同样会产生编译时错误。在这种情况下,instanceof 表达式的结果永远不会为真。

来源:- https://docs.oracle.com/javase/specs/jls/se7/jls7.pdf(第 513 页)

例如a instanceof B(a 是类 A 的对象),如果 A 和 B 不在同一个层次结构中,即它们既不是子类也不是超类,那么这是编译时错误,因为如果它们不在同一个层次结构中,那么 a 是不可能的是 instanceof B。所以编译器在编译时显示错误。

在您的情况下 HashSet 不是 String 的子类或超类,反之亦然,因此它显示编译时错误