【问题标题】:Annotation based data structure visualization - are there similar tools out there?基于注释的数据结构可视化——那里有类似的工具吗?
【发布时间】:2010-06-18 10:44:23
【问题描述】:

对于大学的一个项目,我计划构建一个基于注释的工具来可视化/玩转数据结构。

这是我的想法:

想要尝试自己编写的数据结构的学生需要:

  • 使用某种标记注释标记其数据结构的类型,例如

    @List
    public class MyList<E> { ... }
    

    这样我就知道如何表示数据结构了

  • 需要提供一个迭代器,以便我可以按正确的顺序检索元素

  • 需要注解插入和移除的方法,例如

    @add public boolean insert(E e) { ... }
    

    这样我就可以将该方法“绑定”到某个按钮。

是否存在类似的应用程序?我用谷歌搜索了一下,但没有找到类似的东西。

【问题讨论】:

  • 对于上面的用例,只要让他们实现java.util.List接口即可。
  • @Pete java.util.List 的问题是他们必须实现比可能需要的更多的方法。

标签: java annotations metaprogramming


【解决方案1】:

我真的不明白你为什么需要使用注释来完成这样的任务?你最终会得到一些你的框架无法解析的奇怪方法,或者会以错误的方式解析它——让你制定一组规则,如何正确编写这些方法,以便你的框架能够理解它们。

我认为改用接口是更好的解决方案。用getIterator、getIndex等方法创建自己的StudentList之类的接口,让学生实现这个接口。然后,您将能够加载任何这些类并根据它们实现的接口使用它。

此外,您可以只重用可用的接口,如 List 或 Collection,但是,这可能会使学生编写大量未使用的代码来实现这些接口。所以我宁愿自己写界面。

这种接口的示例是:

interface StudentList<T> {
    public Iterator<T> getIterator();
    public T get(int index);
    public void add(T element);
    public void remove(T element);
}

学生会这样实现它(这个例子只是围绕着 ArrayList):

class MyList<T> implements StudentList<T> {
    private ArrayList<T> realList;

    public MyList() {
        realList = new ArrayList<T>();
    }

    public void add(T element) {
        realList.add(element);
    }

    .......
}

你会像这样测试它:

void testList(StudentList<String> list) {
   list.add(5);
   list.add(10);
   list.get(20);
}

testList(new MyList<String>());

通过这种方式,学生和您的一切都一目了然。

【讨论】:

  • 使用注释的想法是:1)您可以在不重写类的情况下注释旧类(希望如此) 2)您可以只注释您想要的方法(例如,如果您只想测试 add( ) 方法)。但是界面的想法似乎确实是最好的方法......
猜你喜欢
  • 2011-11-06
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
  • 2014-12-27
  • 2023-01-31
  • 2010-10-29
  • 1970-01-01
  • 2016-01-29
相关资源
最近更新 更多