Java toString问题

Java toString问题,java,arrays,list,generics,tostring,Java,Arrays,List,Generics,Tostring,我对Java中的toString方法有问题。这是一份详细的报告。。。我有一个正在查询的数据库。查询返回数据库中的所有成员,我希望以字符串形式返回这些成员。这是我到目前为止所做的 在成员类中我有以下内容 @Override public String toString() { return this.login_name + " (" + this.lastName + ", " + this.firstName + ")"; } 现在,要从数据库中获取成员并将其作为字符串数组

我对
Java
中的
toString
方法有问题。这是一份详细的报告。。。我有一个正在查询的数据库。查询返回数据库中的所有成员,我希望以字符串形式返回这些成员。这是我到目前为止所做的

成员类中
我有以下内容

 @Override 
 public String toString()
 {
    return this.login_name + " (" + this.lastName + ", " + this.firstName + ")";
 }
现在,要从数据库中获取成员并将其作为字符串数组返回,下面是我所拥有的:

/**
 * Accessor used to get all of the user names contained in the underlying
 * database.
 * @return String[] user_names - The names of all the users in the data base.
 * @throws MemberNotFoundSignal
 */
public String[] getMembers() throws MemberNotFoundSignal
{
    List<Member> members = Arrays.asList(this.rscMgr.getAllMembers());

    String[] user_names = new String[members.size()];
    for (int i = 0; i < members.size(); i++)
    {
        user_names[i] = members.get(i).toString();
    }

    return user_names;
}
当我在
getMembers
函数上设置断点时,“user\u names”不包含我期望的字符串的重写版本,而是包含对象的默认返回类型


members.get(i).toString()
不调用重写的toString方法,而是调用对象实现。

您不需要使用ArrayList来调用成员对象的
toString()。您可以在迭代数组时调用
toString()
。请看以下内容

public String[] getMembers(){

    Member members = this.rscMgr.getAllMembers();
    String userNames[] = new String[members.length];

    for(int i=0; i<members.length; i++){
        usersNames[i] = member[i].toString();
    }

}
public字符串[]getMembers(){
Member members=this.rscMgr.getAllMembers();
字符串用户名[]=新字符串[members.length];

对于(int i=0;i您不需要使用ArrayList来调用成员对象的
toString()
。您可以在迭代数组时调用
toString()

public String[] getMembers(){

    Member members = this.rscMgr.getAllMembers();
    String userNames[] = new String[members.length];

    for(int i=0; i<members.length; i++){
        usersNames[i] = member[i].toString();
    }

}
public字符串[]getMembers(){
Member members=this.rscMgr.getAllMembers();
字符串用户名[]=新字符串[members.length];
对于(int i=0;i
在运行时,members.get(i).toString()应该从Member>类调用toString方法(我错了吗)?如果我错了,为什么要在这个类上调用objects-toString方法?>我的理解是,通过将数组转换为列表,它将利用成员的>toString方法(因为泛型)

请记住,泛型仅在编译时使用,并通过擦除实现。您不能使用它来强制转换对象。我猜您的
rscMgr.getAllMembers()
返回的不是
Member
。请尝试以下操作:

int count=0;
for (Member m: rsc.getAllMembers()){
   usersNames[count++] = m.toString();
}
在运行时,members.get(i).toString()应该从Member>类调用toString方法(我错了吗)?如果我错了,为什么要在这个类上调用objects-toString方法?>我的理解是,通过将数组转换为列表,它将利用成员的>toString方法(因为泛型)

请记住,泛型仅在编译时使用,并通过擦除实现。您不能使用它来强制转换对象。我猜您的
rscMgr.getAllMembers()
返回的不是
Member
。请尝试以下操作:

int count=0;
for (Member m: rsc.getAllMembers()){
   usersNames[count++] = m.toString();
}

根据我们的聊天,我们确定您的JAR工件没有正确更新。通过在调试器中评估以下内容,我们确定
成员
正在从正确的位置加载:

Member.class.getProtectionDomain().getCodeSource()
但是当使用反射检查
成员声明的方法时,我们可以看到
toString()
方法不存在:

Member.class.getDeclaredMethods()

因此,我们推断JAR已经过时,您通过在部署站点检查JAR的时间戳确认了这一点。

根据我们的聊天,我们确定您的JAR工件没有正确更新。我们通过在您的ur调试器:

Member.class.getProtectionDomain().getCodeSource()
但是当使用反射检查
成员声明的方法时,我们可以看到
toString()
方法不存在:

Member.class.getDeclaredMethods()

因此,我们推断JAR已经过时,您通过在部署站点检查JAR的时间戳确认了这一点。

您运行了它吗?您能举一个例子
Member
以及
toString
从列表外部和列表内部打印了什么吗?如果没有这些信息,我无法判断可能是什么错误。Wh您是否正在将数组转换为列表或数组?仅使用
getAllMembers()
有什么错?@jeroenvanevel
getAllMembers()
返回与数据库中所有成员相对应的所有成员对象的数组。是的,假设这样,它将完全起作用。rscMgr.getAllMembers()“从数据库中获取任何内容,并将其转换为成员对象。如果不这样做,您将被忽略。@Jonathan请看我的第一条评论,其中我告诉您如何获取JVM正在使用的类文件的位置。该位置是否符合您的预期,以及该文件是否与源代码保持一致?您是否运行了它?您是否可以例如
Member
,以及
toString
从列表外部和列表内部打印的内容?如果没有这些信息,我无法判断可能有什么问题。为什么要将数组变成列表变成数组?仅使用
getAllMembers()
有什么问题?@jeroenvanevel
getAllMembers()
返回与数据库中所有成员相对应的所有成员对象的数组。是的,假设是这样,它将完全起作用。rscMgr.getAllMembers()从数据库中获取任何内容,并将其转换为成员对象。如果没有,您将被忽略。@Jonathan请看我的第一条评论,其中我告诉您如何获取JVM正在使用的类文件的位置。该位置是否与您预期的位置一致,并且该文件是否与源代码保持一致?编译器应该是最新的当从泛型列表访问元素时,执行
checkcast
指令。即使使用类型擦除,仍然有一些类型安全措施。@MikeStrobel Yeah Mike是对的。
getAllMembers
函数确实返回
Member
实例,因此这是不正确的。编译器应该发出
checkca从泛型列表访问元素时的st
指令。即使使用类型擦除,仍然有一些类型安全措施。@MikeStrobel Yeah Mike是对的。
getAllMembers