1

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

我的两个参数构造函数在哪里?

编辑:

我遵循这些确切的步骤 -

// Comment - Remove all files from directory to not create any confusion.
$ rm -rf *

$ vi Beach.java

class Beach {
private String name, city;

public Beach(String name, String city) {
  this.name = name;
  this.city = city;
 }
}

$ javac *.java
$ javap Beach

Compiled from "Beach.java"
class Beach {
  public Beach(java.lang.String, java.lang.String);
}


$ jython
>>> import Beach
>>> b = Beach()
>>> dir(b)

['__class__', '__copy__', '__deepcopy__', '__delattr__', '__doc__', '__eq__', '__format__', '__getattribute__', '__hash__', '__init__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', '__subclasshook__', '__unicode__', 'class', 'equals', 'getClass', 'hashCode', 'notify', 'notifyAll', 'toString', 'wait']
4

1 回答 1

2

看起来您没有使用问题中显示的 Java 类。我可以重现错误。

海滩.py:

import Beach

b = Beach("candolim", "goa")
print b.__class__

Beach.java 替代品。1(零构造函数参数):

public class Beach {
  private String name, city;

  public Beach() {
  }
}

使用 Beach.java 时的输出。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 替代品。2(问题中的类;两个论点):

public class Beach {
private String name, city;

public Beach(String name, String city) {
  this.name = name;
  this.city = city;
 }
}

使用 Beach.java 时的输出。2:

$ 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
>>>

请注意,javap输出是不同的。这里说public class Beach。在问题中它只是class Beach.

于 2013-05-23T17:45:37.467 回答