1

私はJavaにかなり慣れていないので、ネストされたクラスを含むいくつかのJavaを実行しようとしていますMatlab. したがって、内部クラスと外部クラスがあり、コンストラクターとして2つを取るこの新しいクラスのインスタンスを作成しようとしていますが、これを実行しようとするとエラーが発生し、これとは対照的にjava.lang.Objectsこれを通過しようとしていると表示されますLjava.lang.Objectjava.lang.Object。エンコードされた名前について少し調べましたが、よくわかりません。私のコード(からMatlab)は以下の通りです!

>> p = innerclass.getConstructors();

>> p(1) 

ans = 

public innerclassName(java.lang.Object, java.lang.Object)

>> k=javaArray('java.lang.String',3);
>> k(1)=java.lang.String('a');
>> k(2)=java.lang.String('b');
>> k(3)=java.lang.String('c');

>> v=javaArray('java.lang.Integer',3,2);
>> v(1,1) = java.lang.Integer(1);
>> v(2,1) = java.lang.Integer(2);
>> v(3,1) = java.lang.Integer(3);
>> v(1,2) = java.lang.Integer(4);
>> v(2,2) = java.lang.Integer(5);
>> v(3,2) = java.lang.Integer(6);

>> o=[java.lang.Object();java.lang.Object()];
>> o(1) = k;
>> o(2) = v;
>> o.getClass()

ans =

class [Ljava.lang.Object;

>> types=javaArray('java.lang.Class',2) ;
>> types(1)=o.getClass();
>> types(2)=o.getClass();
>> in1 = innerclass.getConstructor(types).newInstance(o)
??? Java exception occurred:
java.lang.NoSuchMethodException: innerclassName.<init>([Ljava.lang.Object;, [Ljava.lang.Object;)
4

1 に答える 1

0

[Linclass [Ljava.lang.Object;は、クラスがL の直後に続くものの配列であること示します。

すると、値「オブジェクト配列」のtypes(1)=o.getClass();types(2)=o.getClass();両方の要素に代入します。次に、コンストラクターが引数として2 つのオブジェクト配列を取り、1 つも見つからない場合、コンストラクターを見つけようとします。したがって、.typesinnerclass.getConstructor(types)innerclassNoSuchMethodException

コンストラクターを作成するか、 topublic innerclassName(java.lang.Object[], java.lang.Object[])の両方の値を変更するかのどちらかです(ただし、何をしたいのかわからなくても、配列を渡すことがわかっている場合は、前者の方が合理的かもしれません)。typesjava.lang.Object.class

于 2013-02-25T12:09:37.990 に答える