Java:静态方法的数组

时间:2013-02-01 18:56:49

标签: java arrays

我想创建一个包含静态方法的数组(或包含对静态方法的引用)。我试图创建一个类的数组,实现与该方法的接口。使用此方法,我将获取该对象,然后在其上调用该方法。这不适用于静态方法。有没有办法在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方法是静态的。

2 个答案:

答案 0 :(得分:3)

当然,您可以拥有Method数组,然后可以使用调用来调用它,请查看以下示例:How do I invoke a private static method using reflection (Java)?

答案 1 :(得分:0)

如果您符合以下条件:

  1. 您知道代码生成时的所有密钥。
  2. 您知道代码生成时的所有值(方法)。
  3. 您可以使用以下代码:

    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}}方法)。