我想创建一个包含静态方法的数组(或包含对静态方法的引用)。我试图创建一个类的数组,实现与该方法的接口。使用此方法,我将获取该对象,然后在其上调用该方法。这不适用于静态方法。有没有办法在Java中实现它?
编辑: 这是我到目前为止使用的方法:
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方法是静态的。
答案 0 :(得分:3)
当然,您可以拥有Method
数组,然后可以使用调用来调用它,请查看以下示例:How do I invoke a private static method using reflection (Java)?
答案 1 :(得分:0)
如果您符合以下条件:
您可以使用以下代码:
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);
}
}
如果您需要放宽其中一项要求,我不相信您可以静态地完成所有工作。
如果您希望能够添加新密钥,则必须在添加时存储它们时创建普通哈希表。 (您可以在default
代码中查看。)
如果你想能够替换值,你必须在那里使用一个间接级别,可能使用Method
个对象或Callable
的实现(你可以在体内调用它们) [{1}}方法)。