我正在制作一种基于命令的应用程序来绘制几何图形。因此,如果用户输入类似RECT 100, 50, 200, 120
的内容,我会在绘图面板上的指定位置绘制一个矩形。
因此,我需要将RECT
映射到g.drawRect(100, 50, 200, 120);
以及所有类似的函数来绘制几何图形。
我将使用哈希映射进行映射,但我不知道如何在java中构建函数数组。在C ++中,我已经做到了这一点。
键可以是'RECT',值可以是索引的偏移量。
请告诉我如何索引这些功能。或者还有更好的方法来解决主要问题吗?
答案 0 :(得分:5)
Java中没有函数指针,您需要通过继承和/或接口来完成。这是一个例子:
interface Shape {
void draw(int[] data);
}
class Polygon implements Shape {
public void draw(int[] data) {
// Draw polygon using points data[i], data[i+1] for points
}
}
class Circle implements Shape {
public void draw(int[] data) {
// Draw circle using data[0], data[1] for the center, and data[2] for radius
}
}
在主程序的构造函数或静态初始化程序中:
Map<String,Shape> shapes = new HashMap<String,Shape>();
shapes.put("POLY", new Polygon());
shapes.put("CIRC", new Circle());
在您的绘图代码中:
shapes.get("CIRC").draw(new int[] {100, 100, 50});
答案 1 :(得分:3)
我必须承认,我并没有真正得到你的设计,我不知道你为什么需要一个像你所说的函数数组,但这就是在java中这样做的事情。
由于Function(java术语中的方法)不是Java中的“first-class-sitizen”,因此无法构建方法数组(至少在java 7中)。你可以做的是使用更面向对象的方法 - 定义一个接口,每个方法将是一个接口的实现(一个类),这样你就可以存储一个接口实现的数组。 我会使用设计模式Command而不是方法或类似的数组......希望这有帮助