假设我有一个名为Invoked的类,我想使用Invoker类的反射来调用它。但是我想从Invoker类中声明的数组给出输入,只要它从键盘获得输入代码。
class Invoked {
public static void main(String ar[]) {
java.util.Scanner s = new java.util.Scanner();
// here i want to give input stored in array except of console from Invoker class.
System.out.println("input given from keyboard is : " + s.next());
}
}
class Invoker {
public static void main(String ar[]) {
// i want to pass array here for keyboard input values like
Class<?> cl = loader.loadClass("Invoked");
Method m = cl.getDeclaredMethod("main", new Class[] {String[].class });
m.setAccessible(true);
m.invoke(null, new Object[] {null });
}
}
答案 0 :(得分:0)
java.util.Scanner()
默认从System.in
读取[停止:扫描程序中没有默认构造函数,您的代码将无法编译]。您可以在调用main(System.setIn())之前将其设置为例如StringInputStream。
class Invoked{
public static void main(String ar[])
{
java.util.Scanner s=new java.util.Scanner(System.in);
//here i want to give input stored in array except of console from Invoker class.
System.out.println("input given from keyboard is : "+s.next());
}
}
class Invoker
{
public static void main(String ar[])
{
//i want to pass array here for keyboard input values like
Class<?> cl = loader.loadClass("Invoked");
Method m=cl.getDeclaredMethod("main", new Class[] { String[].class });
m.setAccessible(true);
System.setIn(new StringBufferInputStream("a b 100"));
m.invoke(null, new Object[] { null });
}
}
答案 1 :(得分:0)
使用ArrayList根据用户输入的行数生成动态数组。
class Invoked {
public static void main(String[] args) {
java.util.Scanner s = new java.util.Scanner(System.in);
List<String> input = new ArrayList<>;
while(s.hasNext()) {
input.add(s.next());
for(String i : input)
System.out.println("input given from keyboard is : " + i);
}
}
要将ArrayList转换为数组,请使用
String inArray = input.toArray();
答案 2 :(得分:0)
我得到了我的问题的确切代码。这是下面给出的代码。
import java.io.ByteArrayInputStream;
import java.lang.reflect.Method;
class Invoked{
public static void main(String ar[])
{
java.util.Scanner s=new java.util.Scanner(System.in);
System.out.println("input given from keyboard is : "+s.next());
int i=s.nextInt()+s.nextInt();
System.out.println("input given from keyboard is : "+i);
}
}
class Invoker
{
public static void main(String ar[])throws Exception
{
Class<?> cl = Class.forName("Invoked");
Method m=cl.getDeclaredMethod("main", new Class[] { String[].class });
m.setAccessible(true);
String inputString="ashish 15 16";
System.setIn(new ByteArrayInputStream(inputString.getBytes()));
m.invoke(null, new Object[] { null });
}
}