Java:静态方法数组
我想创建一个包含静态方法(或包含对静态方法的引用)的数组。我试图创建一个类数组,这些类实现了与该方法的接口。使用此方法,我将获取对象,然后对其调用该方法。这不适用于静态方法。有没有一种用Java实现的方法 编辑: 以下是我迄今为止使用的方法:Java:静态方法数组,java,arrays,Java,Arrays,我想创建一个包含静态方法(或包含对静态方法的引用)的数组。我试图创建一个类数组,这些类实现了与该方法的接口。使用此方法,我将获取对象,然后对其调用该方法。这不适用于静态方法。有没有一种用Java实现的方法 编辑: 以下是我迄今为止使用的方法: interface TableElement{ public Integer lookup(int value); } TableElement[] table = new TableElement[] { new TableElemen
interface TableElement{
public Integer lookup(int value);
}
TableElement[] table = new TableElement[]
{
new TableElement() { public Integer lookup(int value) { return 0; } },
new TableElement() { public Integer lookup(int value) { return value * 3; } },
new TableElement() { public Integer lookup(int value) { return value * value + 3; } },
};
public Integer find(int i, int value) {
return table[i].lookup(value);
}
我希望find方法是静态的。当然,您可以有一个
方法的数组,然后可以使用invoke调用它,检查以下示例:如果您可以满足以下条件:
在代码生成时,您知道所有的键
您知道代码生成时的所有值(方法)
您可以使用如下代码:
public class Table {
public static int hash(String key) {
/* you can use any type of key and whatever hash function is
* appropriate; this just meant as a simple example.
*/
return key.length();
}
public static Integer find(String s, int value) {
int h = hash(s);
switch (h) {
case 4: // "zero"
if (s.equals("zero"))
return methodZero(value);
case 6: // "triple"
if (s.equals("triple"))
return methodTriple(value);
case 11: // "squarePlus3"
if (s.equals("squarePlus3"))
return methodSquarePlus3(value);
default:
throw new UnsupportedOperationException(s);
}
}
private static Integer methodZero(int value) { return 0; };
private static Integer methodTriple(int value) { return value * 3; };
private static Integer methodSquarePlus3(int value) { return value * value + 3; };
/**
* Just a demo.
*/
public static void main(String arguments[]) {
System.out.println("Zero(5): " + find("zero", 5));
System.out.println("Triple(5): " + find("triple", 5));
System.out.println("SquarePlus3(5): " + find("squarePlus3", 5));
System.out.println("boom!");
find("missingcode", 5);
}
}
如果你需要放松这两个要求中的任何一个,我不相信你可以静态地做任何事情
如果您希望能够添加新键,则必须在添加时创建一个普通哈希表来存储它们。(您可以在默认值代码中进行检查。)
如果您希望能够替换值,则必须在那里使用一定级别的间接寻址,可能使用方法
对象或可调用
的实现(您可以从方法零
方法体中调用它们)。您能提供您编写的代码吗?这将有助于了解您迄今为止所做的尝试。我已经添加了代码,@chris为什么要这样做?我正在编写一个程序,该程序提供了一个映射并保存了一个.java文件,该文件是一个完美的静态哈希表,可以编译成其他程序。如果在.java文件中这不是静态的,那就太傻了。如果您正在生成java代码,似乎可以直接在该代码中调用静态方法。我不想更改数据,它将生成.java文件,然后我希望该静态方法尽快返回值。我考虑过切换技术,但我假设它会评估第一种情况,然后是第二种情况,等等。如果我要处理非常大的数据集,那么这可能需要很长时间。阵列背后的想法是,我可以尽可能快地访问这些方法。交换机会一个接一个地评估每种情况吗?我相信理论上Java语言规范和Java虚拟机规范会允许实现一个接一个地评估每种情况。在实践中,如果您有两种以上的情况,编译器和虚拟机将使用更有效的方法;如果使用数组更快,我会非常惊讶。查看中有关编译switch
语句的说明。