Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:静态方法数组_Java_Arrays - Fatal编程技术网

Java:静态方法数组

Java:静态方法数组,java,arrays,Java,Arrays,我想创建一个包含静态方法(或包含对静态方法的引用)的数组。我试图创建一个类数组,这些类实现了与该方法的接口。使用此方法,我将获取对象,然后对其调用该方法。这不适用于静态方法。有没有一种用Java实现的方法 编辑: 以下是我迄今为止使用的方法: interface TableElement{ public Integer lookup(int value); } TableElement[] table = new TableElement[] { new TableElemen

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

当然,您可以有一个
方法的数组,然后可以使用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
    语句的说明。