【问题标题】:Is there a way to create an anonymous Object array with data and an overridden toString method?有没有办法用数据和重写的 toString 方法创建一个匿名对象数组?
【发布时间】:2020-11-04 19:13:08
【问题描述】:
Object[] x = new Object[] {"Skye", "Eyks", 123}
{
    @Override
    public String toString()
    {
        return this[0] + " " + this[1] + " (" + this[3] + ")";
    }
};

这样x.toString() 将返回“Skye Eyks (123)”。

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

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

【问题讨论】:

标签: java arrays anonymous-class


【解决方案1】:

不,这是不可能的。

您的代码粘贴强烈建议另一种解决方案:

Java 是一种静态且名义上类型化的面向对象语言。 Java 非常不擅长处理存储在异构、无类型和未命名的“未知谜团”中的数据——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] 提供更多信息。您现在可以根据需要添加文档(您打算如何“记录”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) {}

这是大量的文档,而且更糟糕的是:这个文档是非结构化的——而对于一个实际的类,方法的名称可以承载大部分的这种含义,并且让您可以独立地记录每个片段。您还可以将任何检查和其他代码分流到正确的位置,而不是最终导致需要在许多地方调用检查输入数组是否正确的代码,并且您需要走出自己的路记录所有内容,如果您传递无效输入会发生什么(而在 Word 的构造函数中只需要这样做一次)。

如果由于外力(例如传递给主函数的参数)最终得到Object[],那么总体目标是尽快将其转换为适当的对象,以便您的 Java 代码尽可能不受这种异构、无类型和未命名的神秘信息的影响。

NB:是的,这意味着你需要为你能想到的一切创建大量的类,所以你最终会得到干净的代码。 Lombok 的@Value 可以提供帮助,java15 的记录也可以。

【讨论】:

    猜你喜欢
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多