有没有办法用数据和重写的 toString 方法创建一个匿名对象数组?

Is there a way to create an anonymous Object array with data and an overridden toString method?

Object[] x = new Object[] {"Skye", "Eyks", 123}
{
    @Override
    public String toString()
    {
        return this[0] + " " + this[1] + " (" + this[3] + ")";
    }
};

这样 x.toString() 就会 return “Skye Eyks (123)”。

NetBeans 说它需要一个分号并且它是一个非法的表达式开头。

为什么我要使用匿名数组 class 是为了在组合框中显示数据,并在用户提交表单后在我的数组中获取所有其他数据。

不,这不可能。

您的代码粘贴强烈建议使用替代解决方案:

Java 是一种静态和名义上类型化的面向对象语言。 Java 非常非常不擅长处理存储在异构、非类型化和未命名 'grabbag of unknown mystery' 中的数据——这就是 Object[]

这可能是您要查找的内容:

public class Word {
    final String word;
    final int score;

    public String getWord() {
        return word;
    }

    public String getReverse() {
        // ... 
    }

    public int getScore() {
        return score;
    }

    @Override public String toString() {
        return word + " " + getReverse() + " (" + score + ")";
    }
}

现在,它有了结构(编译器现在知道了,您的编辑器现在可以帮助您):Word 具有 getWord()getReverse() 等属性; getReverse()[1] 提供更多信息。您现在可以根据需要添加文档(您打算如何 'document' new Object[]?),并且您有灵活性的空间(例如,getReverse() 可以在飞行而不是在施工时传入)。

您现在可以编写采用 Word 的方法。这个:

public void printWord(Word word) {}

几乎是不言而喻的。与此比较:

/**
 * This function requires that you pass a 3-sized object array, with:
 * The first argument must be a string - this is the word to print.
 * The second argument must be that string, reversed. It will be printed in light grey for a mirror effect.
 * The third argument must be a boxed integer, this will be printed in the lower right corner as page number
 */
public void printWord(Object[] o) {}

那是一大堆文档,而且更糟糕的是:该文档是非结构化的 - 而对于实际的 class,方法的名称可以包含大部分含义,并允许您独立记录每个片段。您还可以将任何检查和其他代码外包到正确的位置,而不是最终需要在许多地方调用检查输入数组是否正确的代码,并且您需要不费吹灰之力为所有事情记录如果您传递无效输入会发生什么(相对于在 Word 的构造函数中只需执行一次)。

如果由于外力(例如传递给主函数的参数)而最终得到 Object[],那么一般目标是将其转换为适当的对象一次,并且尽快,以便您的 java 代码尽可能不受这种异构、未类型化和未命名的 mysterymeat 的感染。

注意:是的,这意味着你需要为你能想到的一切编写大量的 classes,这样你最终会得到干净的代码。龙目岛的 @Value 和 java15 的记录都可以提供帮助。