有没有一种方法可以使用数据和重写的toString方法创建匿名Object数组?

问题描述

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是一种静态和名义上面向对象的语言。 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:是的,这意味着您需要为您可以想到的所有内容创建大量的类,因此最终将获得干净的代码。龙目岛的@Value和java15的记录都可以帮助解决这个问题。