Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jython中导入的类中缺少属性_Java_Python_Jython - Fatal编程技术网

Java Jython中导入的类中缺少属性

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

我声明了一个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 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
>>>