Вот код.Если/else обрабатывается неправильно? (Java)
import java.lang.reflect.*;
class Invoke {
public static void main(String[] args) {
int ret;
if (args.length<2) {
System.out.println("Usage: Invoke <class> <method>");
return;
}
if (args.length == 2) {
ret = 2
} else {
System.out.println("Additional parameters not yet supported.");
return;
}
System.out.println("Results: " + ret);
}
}
Проблема заключается в том, даже если я запускаю программу что-то вроде ...
java -cp Invoke;HelloJava4 Invoke HelloJava4 param1 param2 param3
... она по-прежнему признает "param1 param2 param3" в качестве одного из аргументов. Примечание: Путь к классам моей системы установлен в C:\JavaSource
, так -cp Invoke;HelloJava4
делает поиск в каталогах Invoke и HelloJava4 для Invoke.class и HelloJava4.class
Если я System.out.println(args.length);
, он будет выводить правильное число аргументов дано, но когда я проверьте его со следующим оператором if
, он запускает блок кода if
, а не блок кода else
.
if (args.length == 2) {
ret = 2
} else {
System.out.println("Additional parameters not supported yet.");
return;
}
Что дает? : Путать:
Вот неотредактированным код, в полном объеме:
import java.lang.reflect.*;
class Invoke {
public static void main(String[] args) {
Object ret;
for (String arg : args)
System.out.println(arg);
System.out.println("Count: " + args.length + " \n");
if (args.length<2) {
System.out.println("Usage: Invoke <class> <method>");
return;
}
try {
Class theClass = Class.forName(args[0]);
Method theMethod = theClass.getMethod(args[1]);
if (args.length == 2) {
System.out.println("Invoking method " + args[1] + " within class " + args[0]);
ret = theMethod.invoke(null);
} else {
// pass parameters to .invoke() if more than two args are given
// for now, just exit...
System.out.println("Parameter passing not yet supported.");
return;
}
System.out.println("Invoked static method: " + args[1]
+ " of class: " + args[0]
+ " with no args\nResults: " + ret);
} catch (ClassNotFoundException e) {
System.out.println("Class (" + args[0] + ") not found.");
} catch (NoSuchMethodException e2) {
System.out.println("Class (" + args[0] + ") found, but method does not exist.");
} catch (IllegalAccessException e3) {
System.out.println("Class (" + args[0] + ") and method found, but method is not accessible.");
} catch (InvocationTargetException e4) {
System.out.println("Method threw exception: " + e4.getTargetException());
}
}
}
А вот точные результаты дает:
C:\JavaSource>cd invoke
C:\JavaSource>javac invoke.java
Note: invoke.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
C:\JavaSource>cd ..
C:\JavaSource>java -cp Invoke;HelloJava4 Invoke HelloJava4 param1 param2 p
aram3
HelloJava4
param1
param2
param3
Count: 4
Class (HelloJava4) found, but method does not exist.
Серьезно. Ошибка Java? Я думаю, вы обнаружите, что Java обрабатывает все просто, включая блоки.Когда вы думаете, что это не так, обратите внимание на ошибку в * вашем * коде или в * вашем * понимании Java, как работает Java. –
Я не уверен, что я тебе верю; Я не могу обмануть это. Вы уверены, что вы перекомпилировали/etc? –
Вы пробовали распечатать содержимое арсов? –