2013-02-25 45 views
1

我对Java很新,我想做一些涉及嵌套类的java,我在Matlab中运行它。所以我有我的内部类和我的外部类,我试图创建这个新类的实例,它需要两个java.lang.Objects作为它的构造函数,但是当我尝试这样做时,我收到一个错误,它说我试图通过这个Ljava.lang.Object作为与java.lang.Object相反。研究了一下关于这是如何编码的名字,但我不太明白。任何帮助将不胜感激,我的代码(从Matlab)在下面!Ljava.lang.Object error - Matlab/Java

>> 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;) 

回答

0

class [Ljava.lang.Object;[L表明类是阵列后,立即L.参见what is `[Ljava.lang.Object;?

当你做types(1)=o.getClass();types(2)=o.getClass();,分配给的types价值“这两个元素接下来对象数组“。 innerclass.getConstructor(types)然后试图找到一个构造函数,如果innerclass需要两个对象数组作为参数,并且没有找到一个,因此NoSuchMethodException

要么你创建一个构造public innerclassName(java.lang.Object[], java.lang.Object[])或您的types两个值更改为java.lang.Object.class,这可能是你的意思做(尽管没有knowning你想做的事,前者可能,如果你知道你将通过更加合理在数组中)。

+0

非常感谢您的回复。不胜感激。不幸的是,我不能改变公共的innerclassName构造函数,它是一个我必须导入的硬编码类。而且我也无法更改类型(1)和类型(2)的值,因为: '>> types(1)= java.lang.Object.class ???将字符赋值给Java数组是不允许的# 所以我在这里有一堵砖墙! – tartanarmy123 2013-02-25 12:43:55

+0

@ tartanarmy123对不起,我的坏,我从来没有在MATLAB中使用过Java,只有两个分开。 'java.lang.Object.class'是引用类对象的java方法,但是在MATLAB中它以某种方式创建了一个带有类名的字符串。尝试创建一个新的单个对象,并在分配类型时使用“o”来代替'o',即'dummy = java.lang,Object;类型(:)= dummy.getClass();'。 – 2013-02-25 13:01:15

+0

非常感谢!使用假人实际上已经开始了!干杯!! – tartanarmy123 2013-02-25 13:22:02

相关问题