在Java中,如何为接口数组定义不同的方法?在没有java库的情况下使用哈希表

在Java中,如何为接口数组定义不同的方法?在没有java库的情况下使用哈希表,java,Java,我在Java中有一个编程问题: 我可以为任何不同的接口数组元素定义不同的方法吗 myInterface[] op = new myInterface[4]; 现在“myInterface”只有1个方法:publicstaticintdosomething(inta,intb) 我需要定义该方法,根据元素id(0-3)对数字执行不同的操作 限制: 必须使用哈希表 无开关大小写或if语句(由于哈希表) 在任何情况下都不能使用Java定义的哈希表 i、 e.如果我调用op[0]。doSomethin

我在Java中有一个编程问题:

我可以为任何不同的接口数组元素定义不同的方法吗

myInterface[] op = new myInterface[4];
现在“myInterface”只有1个方法:
publicstaticintdosomething(inta,intb)

我需要定义该方法,根据元素id(0-3)对数字执行不同的操作

限制:

  • 必须使用哈希表
  • 无开关大小写或if语句(由于哈希表)
  • 在任何情况下都不能使用Java定义的哈希表
  • i、 e.如果我调用
    op[0]。doSomething(2,3)
    它将输出
    12
    (2^2*3)
    如果我调用
    op[1],doSomething(2,3)
    它将输出
    5
    (2+3)

    编辑:我想知道这是可能的,还是我在追我的尾巴?
    如果有人能建议一种方法来完成它,我不需要完整的答案,只是建议,请

    另外,我查看了所有关于Java接口的页面,没有发现任何有用的内容。

    我知道了

    class interface operations { public int doSomething(int a, int b) {} }
    
    public class test {
        public static void main(...) {
        operations[] ops = new operations[4];
        ops[0] = new operations() {public int doSomething(int a, int b) {return a-b*a;}};
    ...etc.
    }
    

    回答:使用匿名类。

    我会使用这种方法

    public class MyInterface{
      private int numberInStack;
    
    public MyInterface(int num){
      this.numberInStack = num;
    }
    
    public static int doSomething(int a, int b){
      switch (numberInStack):
      case 0: {
        return  a-b*a;    
      }
      //... all other cases
    
    }
    
    之后在代码中

     MyInterface[] op = new MyInterface[4];
     op[0] = new MyInterface(0);
    
    但这表明,
    doSomething
    实际上可以做的事情有很多,而且它实际上总是返回
    int
    。在其他方面,我会使用第一个答案中的方法

    静态使用对您来说是个坏主意吗?
    我想在第2章,尤其是第33章(EnumMap)

    谷歌一直在给我java哈希表库的结果…-1:对不起,这篇文章放错地方了。阅读常见问题。然后写一些代码,将代码发布到stackoverflow上,或者从老师或同学那里获得帮助。不要只把作业分配给我们。@kevin cline我不知道这是否可能,所以我没有可以做任何事情的代码,我只有一个接口,我写了它(文件中总共3行)和另一个类,它有我在main中写的数组。我应该写出来吗?我明白你的意思吗?你应该用谷歌搜索的术语是“多态性”。我不明白你所说的哈希表用法是什么意思,但是
    []
    实际上是
    []
    。创建用所需方法的不同实现实现给定接口的类,并将每个类的对象放入数组中,然后在调用该方法时,每个对象都将按您的要求运行哈希表位是指向函数不同定义的id的数组。类和接口名称应使用大写字母拼写,并且您使用的接口定义错误(不要使用静态)。链接到有关匿名类如何工作的文档对询问者很有用。另外,这个答案没有使用哈希表,这是请求者规定的。@ftr是的,我的错,我实际上没有在我的代码中写“static”,但在这里我写了,我会编辑出来,谢谢。@sgmorrison是的,我没有写出来,但我使用了chars,并转换为int
    ascicode=(int)someChar字符然后用作不同匿名类函数的ID。看起来很酷,但不是我需要的。其要点是使用哈希表,而不是开关大小写和if-else。这是一个简化的观点,可以证明在大型服务器上,跳过比较一长串条件将花费更少宝贵的CPU周期。简单地说,如果你有1000个不同的操作你必须做。但是,谢谢,我不知道堆栈可以通过这种方式变得有用。正如我在回答中所说,我在这里的假设是,比如说,堆栈中最多有10个项目。在少数情况下,这种做法是可以理解的。但是,如果你倾向于在堆栈中有1000个项目,那么我的建议是否定的。我可能应该在问题中提到这个事实……为了简单起见,我只使用了“4”。