不,这是不可能的。
您的代码粘贴强烈建议另一种解决方案:
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 的记录也可以。