Tag: 变量函数

在数组中的参数时调用Method.invoke()

我有以下界面: interface Foo { void bar(String a, int b); } 我想Foo.bar地调用Foo.bar (在Foo的实现上)。 但是,参数是在数组中 ,我不知道它的大小。 以下不起作用: void gee(Foo someFoo, Method bar, Object[] args) { bar.invoke(someFoo, args); } 这不起作用,因为args被编译器作为单个参数进行威胁,并且数组没有“扩展”到vararg,而是被包含(内部)在一个具有单个元素的数组中,即 @Test public void varArgTest() { assertTrue(varArgFoo(new Object[] {1, 2}) == 1); } private static int varArgFoo(T… arg) { return arg.length; } 在这种情况下如何调用Method.invoke()以便将数组作为vararg进行威胁? 或者更一般的问题:当参数在数组中时我如何调用vararg方法我不知道数组的大小直到运行时。

在Java 7中使用方法重载时,为什么autoboxing不会覆盖varargs?

我们的Java项目中有一个类LogManager,如下所示: public class LogManager { public void log(Level logLevel, Object… args) { // do something } public void log(Level logLevel, int value, Object… args) { // do something else } } 在Debian下使用OpenJDK 6编译项目时,每个工作都很好。 使用OpenJDK 7时 ,构建(使用ant完成)会产生以下错误,并且构建失败: [javac] /…/LogManager.java:123: error: reference to log is ambiguous, both method log(Level,Object…) in LogManager and method log(Level,int,Object…) in LogManager match […]

如何使用varargs和reflection

简单的问题,如何使这段代码工作? public class T { public static void main(String[] args) throws Exception { new T().m(); } public // as mentioned by Bozho void foo(String… s) { System.err.println(s[0]); } void m() throws Exception { String[] a = new String[]{“hello”, “kitty”}; System.err.println(a.getClass()); Method m = getClass().getMethod(“foo”, a.getClass()); m.invoke(this, (Object[]) a); } } 输出: class [Ljava.lang.String; Exception in […]