我之前发过一篇文章,说明对象的toString
方法没有在我定义的类中被覆盖。这是我previous post的引用。
我有一个Member class
,其中包含与某人相对应的数据(姓名,电话号码,生日等)。在我的应用程序中,我查询数据库以构建数据库中包含的满足某些特定条件的所有成员的数组。我要做的是在这个成员数组上构建一个JComboBox
,所以为了做到这一点,我试图建立一个字符串数组,用他的用户名,姓氏和名字来表示每个用户(用户名(姓氏,名字))。例如,数据库将返回jzwiz (Taylor, Billy)
。要做到这一点我已经覆盖了Member类中的toString方法,如此:
@Override
public String toString()
{
return this.name + " (" + this.lastName + ", " + this.firstName + ")";
}
这是构建JComboBox组件的代码:
String[] user_names = this.model.getMemberNames();
this.memberInput = new JComboBox(user_names);
getMemberNames
函数执行以下操作:
/**
* Returns an array of all of the names and logins of the members in the
* database.
* @return String[] user_names: The names and logins of all of the members in
* the database.
* @throws MemberNotFoundSignal
*/
public String[] getMemberNames() throws MemberNotFoundSignal
{
CodeSource cs = Member.class.getProtectionDomain().getCodeSource();
Method[] methods = Member.class.getDeclaredMethods();
Member[] members = this.rscMgr.getAllMembers();
String[] user_names = new String[members.length];
for (int i = 0; i < members.length; i++)
{
user_names[i] = members[i].toString();
}
return user_names;
}
我希望 members [i] .toString()会返回重写的Member.toString函数,但事实并非如此。
当我调试程序时,getCodeSource
向我显示正在使用的jar文件的路径。 我已经验证jar已更新到最新版本(包括重写的toString方法的修订版),但getDeclaredMethods函数未显示toString方法。它几乎就像我所做的改变没有反映在更新的jar中。
在我进行更改后,我必须通过ANT Build文件清理并重建源代码,但在每次构建之后,我已经验证jar已更新到最新版本。还有什么可能导致这个问题?我在看一些简单的东西吗?
编辑:所以这是一个更新。我发现实际编译的源代码没有更新,但是当我从构建文件中清理并重建时,jar上的时间戳正在更新。什么是解决方法?
答案 0 :(得分:0)
我想我知道发生了什么事;确保classpath
中没有jar文件的旧副本。如果你在一个容器中运行它,请确保你清理掉它所保留的旧类的任何副本。