不是类的实例Vector java

时间:2016-05-14 16:37:02

标签: java vector syntax-error instanceof

我想知道如何检查向量中的元素是否不是类的实例。 场景是如果向量m中的元素存在于我们增加和的类中。如果i不是该类的实例,那么我们返回-1。这是我的代码:

public static int CountHighs(Vector m) {
    int sum = 0;
    for (int i = 0; i < m.size(); i++) {
        try {
            if (m.get(i) instanceof HighRights) {
                sum += 1;
            } else if ((!m.get(i) instanceof Highrights) || (!m.get(i) instanceof LowRights)) {
                sum = -1;
            }
        } catch (NullPointerException E) {
            System.out.println("Error");
            System.exit(0);
            return 0;
        }
        return sum;
    }
}

我用过“!”这里为受访者带来好处。

!m.gets会导致错误。我想知道是否有一种说明元素是否不是这个类的实例的方法。

3 个答案:

答案 0 :(得分:2)

一元运算符(例如!)的优先级高于Java中的关系运算符(例如instanceof)(有关详细信息,请参阅the official tutorial)。因此,Java首先尝试解释!m.get(i)并失败,因为m.get(i)不返回布尔值。要解决此问题,您应该使用括号首先进行instanceof评估:

else if (!((m.get(i) instanceof Highrights) || (m.get(i) instanceof LowRights))) {

答案 1 :(得分:1)

只需为此(!m.get(i) instanceof Highrights)更改此!(m.get(i) instanceof Highrights)即可。确实!boolean值的运算符,但这里m.get(i)不会返回boolean而是一个对象,所以它不会编译,所以你需要将它放在外面为了获得测试的负值x instanceof y

所以最后的测试是!(m.get(i) instanceof Highrights) || !(m.get(i) instanceof LowRights)

NB:此处您的测试位于else if,这意味着之前的if失败,因此您已经知道m.get(i) instanceof HighRightsfalse这样您的测试!(m.get(i) instanceof Highrights) || !(m.get(i) instanceof LowRights)始终为true,因此我认为您的测试应仅为else if (!(m.get(i) instanceof LowRights))

答案 2 :(得分:0)

只是做:

else if(!(m.get(i) instanceof LowRights))

我还格式化了其余的代码,并取出了不必要的检查:

else if(!(m.get(i) instanceof Highrights))

括号将整个语句视为boolean,然后您可以使用!来否定该语句。此外,由于您使用else if,这意味着m.get(i)不能成为HighRights的实例,因此检查是不必要的,因此您的最终代码将如下所示:

public static int CountHighs (Vector m) {
    int sum=0;
    for(int i=0; i<m.size();i++){   
        try{
            if(m.get(i) instanceof HighRights){   
            sum+=1;
        }
        else if(!(m.get(i) instanceof LowRights)){   
            sum=-1;
        }
        catch(NullPointerException E){
            System.out.println("Error");
            System.exit(0);
            return 0;
        }
    }
    return sum;
}