语法错误的实例?

时间:2015-10-17 09:53:45

标签: java instanceof

我有一个与“instanceof”相关的练习,我不太清楚如何使用它。这就是我想出的:

for(int i = 4; i < 6; i++){
    int availSupply = part[i].stockLevel+part[i].getAvailForAssembly();
    if(availSupply instanceof Integer){
        System.out.println("Total number of items that can be supplied for "+ part[i].getID()+"(" + part[i].getName() + ": "+ availSupply);
    }
}

代码对我来说很好,但它出现了一个错误:

Multiple markers at this line

Incompatible conditional operand types int and Integer at:  if(availSupply instanceof Integer){

我不知道我做错了什么,这是唯一出现的错误。

3 个答案:

答案 0 :(得分:8)

您不能将instanceof与基本类型的表达式一起使用,就像您在此处使用availSupply一样。毕竟,int不能是其他任何东西。

如果已经声明getAvailForAssembly()返回int,那么您根本不需要if语句 - 只是无条件地执行正文。如果它返回Integer,您应该使用:

Integer availSupply = ...;
if (availSupply != null) {
    ...
}

答案 1 :(得分:0)

此处int是原始值,对象的instanceof关键字检查属于您的案例中的类i,e Integer。所以int本身就是一个原始值不是instance class Integer 以下是使用instanceof关键字的class InstanceofDemo { public static void main(String[] args) { Parent obj1 = new Parent(); Parent obj2 = new Child(); System.out.println("obj1 instanceof Parent: " + (obj1 instanceof Parent)); System.out.println("obj1 instanceof Child: " + (obj1 instanceof Child)); System.out.println("obj1 instanceof MyInterface: " + (obj1 instanceof MyInterface)); System.out.println("obj2 instanceof Parent: " + (obj2 instanceof Parent)); System.out.println("obj2 instanceof Child: " + (obj2 instanceof Child)); System.out.println("obj2 instanceof MyInterface: " + (obj2 instanceof MyInterface)); } } class Parent {} class Child extends Parent implements MyInterface {} interface MyInterface {} 关键字的基本摘要。

 obj1 instanceof Parent: true
   obj1 instanceof Child: false
   obj1 instanceof MyInterface: false
    obj2 instanceof Parent: true
    obj2 instanceof Child: true
    obj2 instanceof MyInterface: true

<强>输出:

instanceof

请仔细阅读此链接,以便更好地了解$string = "My name is StackOcerflow and I like programming, one more comma. Next sentance."; $words = preg_split( "/( )/", $string ); print_r($words); $length = 0; foreach($words as $word){ $length += strlen($word); } $string_new = ""; $string_new2 = ""; $length_half = 0; foreach($words as $word){ $length_half += strlen($word); if($length_half >= ($length/2)){ $string_new2 .= $word . ' '; }else{ $string_new .= $word . ' '; } } echo '<br/><br/>'; echo 'Full=' . $string . '<br/>'; echo 'First=' . $string_new . '<br/>'; echo 'Second=' . $string_new2 . '<br/>'; echo 'First length=' . strlen($string_new) . '<br/>'; echo 'Second=' . strlen($string_new2) . '<br/>'; 关键字: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html

答案 2 :(得分:0)

您不能将instanceof运算符与原始类型的变量(例如intbooleanfloat)一起使用,因为它们只能包含数字/名称已经告诉您的值(int的整数,true的{​​{1}}或false的{​​{1}}以及boolean的浮点数。)

类型为类的变量,可以float一起使用,因为类(通常)可以扩展。变量instanceof也可能包含类Foo variable的实例(例如,如果Bar),因此您实际上可能需要Bar extends Foo运算符。