Jython调用Java时抛出异常要求两个参数,但仅编码了一个参数

2 投票
2 回答
689 浏览
提问于 2025-04-16 00:08

我有一个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'

这样说清楚了吗?

撰写回答