Java Jython中导入的类中缺少属性
我声明了一个Java类-Java Jython中导入的类中缺少属性,java,python,jython,Java,Python,Jython,我声明了一个Java类- class Beach { private String name, city; public Beach(String name, String city) { this.name = name; this.city = city; } } 我将其导入jython并尝试创建一个对象- import Beach b = Beach("candolim", "goa") Traceback (most rec
class Beach {
private String name, city;
public Beach(String name, String city) {
this.name = name;
this.city = city;
}
}
我将其导入jython并尝试创建一个对象-
import Beach
b = Beach("candolim", "goa")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: java.lang.Object(): expected 0 args; got 2
看起来您没有使用问题中所示的Java类。我可以重现错误 beach.py:
import Beach
b = Beach("candolim", "goa")
print b.__class__
Beach.java alt.1(零构造函数参数):
使用Beach.java alt.1时的输出:
$ jython beach.py
Traceback (most recent call last):
File "beach.py", line 3, in <module>
b = Beach("candolim", "goa")
TypeError: Beach(): expected 0 args; got 2
使用Beach.java alt.2时的输出:
$ jython beach.py
<type 'Beach'>
$jython beach.py
编辑:似乎发生了一些奇怪的事情。以下是我尝试按照编辑的问题中的步骤操作时发生的情况:
$ rm *.class
$ cat Beach.java
public class Beach {
private String name, city;
public Beach(String name, String city) {
this.name = name;
this.city = city;
}
}
$ javac Beach.java
$ javap Beach
Compiled from "Beach.java"
public class Beach {
public Beach(java.lang.String, java.lang.String);
}
$ jython
Jython 2.7b1 (default:ac42d59644e9, Feb 9 2013, 15:24:52)
[Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)] on java1.7.0_15
Type "help", "copyright", "credits" or "license" for more information.
>>> import Beach
>>> b = Beach()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Beach(): expected 2 args; got 0
>>>
$rm*.class
$cat Beach.java
公众泳滩{
私有字符串名称,城市;
公共海滩(字符串名称、字符串城市){
this.name=名称;
this.city=城市;
}
}
$javac Beach.java
$javap海滩
从“Beach.java”编译而来
公众泳滩{
公共海滩(java.lang.String,java.lang.String);
}
$jython
Jython 2.7b1(默认值:AC42D59644E92013年2月9日15:24:52)
Java 1.7.0_15上的[Java HotSpot(TM)64位服务器虚拟机(Oracle Corporation)]
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>进口海滩
>>>b=海滩()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:Beach():应为2个参数;得了0分
>>>
请注意,
javap
输出是不同的。这里写着公共级海滩
。在问题中,它只是类Beach
可能在Beach.Beach
中,与您的类一起。是否要在此基础上展开?Beach
是您导入的模块。那么Beach是模块Beach中的一个类?导入海滩。海滩不工作<代码>导入错误:没有名为Beach的模块当然没有。导入在Python中的工作方式与此不同。可能OP在向构造函数添加参数后没有重新编译java文件?是的,这是我的猜测。@mzjn问题是Beach没有像您所说的那样公开。非常感谢mzjn。我希望python能够提供一条描述性的错误消息,而不仅仅是实例化一个虚拟对象。
public class Beach {
private String name, city;
public Beach(String name, String city) {
this.name = name;
this.city = city;
}
}
$ jython beach.py
<type 'Beach'>
$ rm *.class
$ cat Beach.java
public class Beach {
private String name, city;
public Beach(String name, String city) {
this.name = name;
this.city = city;
}
}
$ javac Beach.java
$ javap Beach
Compiled from "Beach.java"
public class Beach {
public Beach(java.lang.String, java.lang.String);
}
$ jython
Jython 2.7b1 (default:ac42d59644e9, Feb 9 2013, 15:24:52)
[Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)] on java1.7.0_15
Type "help", "copyright", "credits" or "license" for more information.
>>> import Beach
>>> b = Beach()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Beach(): expected 2 args; got 0
>>>