Warm tip: This article is reproduced from serverfault.com, please click

java-如何更改ArrayList中对象的显示名称

(java - How to change the displayed name of an object in an ArrayList)

发布于 2020-11-28 03:29:39

我想更改ArrayList中的元素名称,而不更改其值。喜欢 :-

ArrayList<Integer> array1 = new ArrayList<>();
int num = 1;
array1.add(num);

现在我想将num更改为number,但是它的值将是1。(可以吗?)

我想在摆动组合框中显示ArrayList中的所有元素,但是某些变量显示了奇怪的名称,例如“ Client @ 45673 ...”。但我希望用户看到一个描述性名称。这就是为什么我想重命名变量。

Questioner
BoomCode 10010011
Viewed
11
Stephen C 2020-11-28 12:47:30

好的,因此你正在使用“更改变量的名称”在众所周知的花园小径上徘徊。

首先,它不是变量。当你将某项放入集合中时,Java不会记住你曾经在变量中拥有值。

其次,一般而言,值(尤其是对象)没有名称……除非你在类定义中专门实现了某种“名称”字段。

但我认为这句话的线索是:

...但是一些变量显示了奇怪的名称,例如“ Client @ 45673 ...”

那不是名字!看起来像默认实现的输出1toString,你的Client类继承java.lang.Object

如果要打印/显示更有意义的内容,则你的Client类需要使用其自己的实现重写toString()方法。

例如:

public class Client {
    private String myDescription;

    public Client(...) {
        ...
        myDescription = /* something */
    }

    @Override
    public String toString() {
        return myDescription;
    }
}

toString只要方法表示为字符串,你的方法就可以返回你想要的任何内容。

顺便说一句,如果要打印问题中的array1对象,则会看到实际值1而不是“名称”(如你所说的)。这是因为java.lang.Integer重写该toString()方法。


1-默认toString()结果由内部名称和对象的身份哈希码值组成。后者是JVM生成的幻数。它不能保证唯一,但是可以保证它在对象的整个生命周期中都不会改变。无论如何,你不能更改该方法生成的字符串...除非覆盖它。