在Java中,如何为接口数组定义不同的方法?在没有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
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,并转换为intascicode=(int)someChar代码>字符然后用作不同匿名类函数的ID。看起来很酷,但不是我需要的。其要点是使用哈希表,而不是开关大小写和if-else。这是一个简化的观点,可以证明在大型服务器上,跳过比较一长串条件将花费更少宝贵的CPU周期。简单地说,如果你有1000个不同的操作你必须做。但是,谢谢,我不知道堆栈可以通过这种方式变得有用。正如我在回答中所说,我在这里的假设是,比如说,堆栈中最多有10个项目。在少数情况下,这种做法是可以理解的。但是,如果你倾向于在堆栈中有1000个项目,那么我的建议是否定的。我可能应该在问题中提到这个事实……为了简单起见,我只使用了“4”。