【问题标题】:Index of geometric functions几何函数索引
【发布时间】:2012-02-02 02:18:32
【问题描述】:

我正在制作一种基于命令的应用程序来绘制几何图形。因此,如果用户输入类似RECT 100, 50, 200, 120 的内容,我会在绘图面板上的指定位置绘制一个矩形。

所以为此我需要将RECT 映射到g.drawRect(100, 50, 200, 120); 以及所有类似的函数来绘制几何图形。

我将使用 散列映射 进行映射,但我不知道如何在 java 中构建函数数组。不过在 C++ 中我已经做到了。

键可以是'RECT',值是索引的偏移量。

请告诉我如何索引这些函数。还是有更好的方法来解决主要问题?

【问题讨论】:

    标签: java swing graphics indexing hashmap


    【解决方案1】:

    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});
    

    【讨论】:

    • 哇,我的担忧似乎烟消云散了!这是我能得到的最优雅的代码!
    • @VinayakGarg 现在我想我也纠正了语法错误 :) 我已经 3 年多没有写 Java 了,所以 C# 语法潜入我的声明中。
    • 没关系!我的 IDE 会处理语法错误 :) 我更关心逻辑。
    【解决方案2】:

    我不得不承认,我并没有真正理解你的设计,我不确定你为什么需要你所说的一系列函数,但这就是在 java 中可以做到这一点。

    由于 Function(Java 术语中的方法)在 Java 中不是“一流的”,因此您无法构建方法数组(至少在 java 7 中)。您可以做的是使用更面向对象的方法 - 定义一个接口,每个方法都将是接口的一个实现(一个类),这样您就可以存储一个接口实现数组。 我会使用设计模式命令而不是方法数组或其他东西......希望这会有所帮助

    【讨论】:

    • 是的,这有帮助。谢谢!我想我需要这样的帮助来加深我的 Java 知识。
    • 除非他们在 Java 7 中删除 Java 功能,否则您可以使用 Reflection 创建一个Methods 数组>。 (docs.oracle.com/javase/tutorial/reflect/member/…) 我认为这不是解决 Java 问题的好方法,但我想指出可以通过这种方式完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多