Jython调用Java时抛出异常要求两个参数,但仅编码了一个参数
我有一个Java方法想在我的Jython servlet中调用,这个servlet是在tomcat5上运行的。这个方法看起来是这样的:
@SuppressWarnings("unchecked")
public School loadByName(String name) {
List<School> school;
school = getHibernateTemplate().find("from " + getPersistentClass().getName() + " where name = ?", name);
return uniqueResult(school);
}
我在Jython中是这样调用它的:
foobar = SchoolDAOHibernate.loadByName('University')
但是它报错了,提示loadByName()需要2个参数,但我只给了1个。那它可能还需要什么其他参数呢?
如果我先尝试创建一个实例,比如:
foo = com.dc.sports.dao.hibernate.SchoolDaoHibernate()
foo.loadByName('University')
第一次调用时又抛出了一个异常,提示:
这个类(com.dc.sports.dao.hibernate.SchoolDaoHibernate)没有可见的构造函数
我猜这是因为它是一个私有包:
package com.dc.sports.dao.hibernate;
...
@SuppressWarnings("unchecked")
class SchoolDaoHibernate extends AbstractDaoHibernate<School> implements SchoolDao {
那么我该怎么才能调用这个方法呢?
2 个回答
1
因为loadByName
这个方法不是静态的,Jython可能会认为第一个参数应该是SchoolDAOHibernate
的一个实例。如果这样设计对你来说合理的话,可以把这个方法改成静态的。
2
loadByName 这个方法不是静态的。
你需要一个实例才能调用它。
sdh = SchoolDAOHibernate(...) # ... any args for construction ??
sdh.loadByName('Univeristy') # 2 args :-) self (sdh) and 'University'
这样说清楚了吗?