Java 从Unity3D C#脚本中调用AAR中具有多个参数的方法

Java 从Unity3D C#脚本中调用AAR中具有多个参数的方法,java,android,unity3d,aar,Java,Android,Unity3d,Aar,我有一个具有以下方法的类: public static int add( int a, int b ){ return a + b; } 我试着用统一剧本来称呼它 var ajc = new AndroidJavaClass( "com.mil.rfcommunitylib.BluetoothClassic" ); int result = ajc.CallStatic<int,int>( "add", new int[] { 1, 2 } ); var ajc=newa

我有一个具有以下方法的类:

public static int add( int a, int b ){
    return a + b;
}
我试着用统一剧本来称呼它

var ajc = new AndroidJavaClass( "com.mil.rfcommunitylib.BluetoothClassic" );
int result = ajc.CallStatic<int,int>( "add", new int[] { 1, 2 } );
var ajc=newandroidjavaclass(“com.mil.rfcommunitylib.BluetoothClassic”);
int result=ajc.CallStatic(“add”,newint[]{1,2});
但我明白了

AndroidJavaException:java.lang.NoSuchMethodError 在我的logcat

怎么了?可以使用没有参数的方法,因此我们可以假设我正确设置了所有内容

而不是呼叫:

var ajc = new AndroidJavaClass( "com.mil.rfcommunitylib.BluetoothClassic" );
int result = ajc.CallStatic<int,int>( "add", new int[] { 1, 2 } );
var ajc=newandroidjavaclass(“com.mil.rfcommunitylib.BluetoothClassic”);
int result=ajc.CallStatic(“add”,newint[]{1,2});
您应该实际使用:

var ajc = new AndroidJavaClass( "com.mil.rfcommunitylib.BluetoothClassic" );
int result = ajc.CallStatic<int>( "add", 1, 2 );
var ajc=newandroidjavaclass(“com.mil.rfcommunitylib.BluetoothClassic”);
int result=ajc.CallStatic(“add”,1,2);

如果仔细查看文档:您将看到,在您的情况下,函数返回
int
,因此它应该是
javaClass.CallStatic(functionName,params…
,并且您在函数名后传递函数作为单独参数接受的参数,不是作为相同参数类型的数组。

从我的头顶上看:泛型类型不是用来指定返回类型的吗?它不应该是简单的:
ajc.CallStatic(“add”,newint[]{1,2})。否,具有一个模板参数的没有返回类型。这里,第一个是返回类型,第二个是参数类型。那么它将与
add
方法的签名不匹配。没有返回类型:
CallStatic(String-methodName,object[]args)
,返回类型:
CallStatic(String-methodName,object[]args)
。为什么不匹配?它是
RetType CallStatic(string name,T[]args)
,因此
int CallStatic(string name,int[]args)->应该与我的Java类匹配,不是吗?不是,因为它不是
rettypecallstatic(字符串名,t[]args)
。但你得到的答案如下:)哦。不知道C#中的“params”关键字。有道理。我想我必须通过一个数组。谢谢我仍然不明白为什么我的代码不能工作,我只是注意到我使用的方法(同时指定返回和参数类型的方法)没有使用
params
关键字。预期用途是什么?根据错误消息,需要的签名是
”([I)I'
,我想,这意味着一个int数组参数。这个函数仅仅是用来传递数组的吗?检查你的代码,你的返回类型是
。我甚至对它的编译感到惊讶…另一件事是,阅读文档时不会被
参数数组传递给方法而弄错。
这意味着您可以根据需要传递任意多个参数,而不是将所有参数都放在一个数组中。我们讨论的是两种不同的方法。您所指的方法(一个模板参数)与您发布的方法相同。我使用的方法(显然在Unity online文档中找不到,有两个模板参数,第一个是返回类型,第二个是参数类型)不知道。但仍然不知道如何使用它。也许它是用来传递数组的。无论如何。