据我了解,在访问者模式的典型规范中,被访问的对象决定如何遍历,一般只支持一种遍历顺序。(参见,例如,这里或这里。)
是否有相同使用双重分派的名称,但访问者可以决定如何遍历对象层次结构?在我的应用程序中,一个非常异构的文档模型类型集合正在向访问者推送,例如导出操作。但是,要说各种处理器(访问者)都应该以广度优先顺序遍历似乎有些僵硬。其中一些可能只关注模型的一个子集,或者可能需要以特定的顺序处理模型的各个部分。
我担心以非标准方式使用访问者模式中的名称会混淆其他开发人员。我的建议有名字吗?
我还会问是否有理由不让访问者控制遍历,以防万一我遗漏了通常的访问者公式中的一些智慧。如果可能相关,该应用程序是 Java 语言。
我知道我可以在 Groovy 中使用注释来注释我的类,但是我可以在 Groovy 中编写注释本身吗(而不是仅使用用 Java 编写的注释)?如果有,从什么版本开始?
当我取消搁置时,它使用 Mercurial 的合并功能,但如果我完成合并时出现错误,我没有看到任何方法可以取回原始搁置的补丁并重做事情。除了搜索备份驱动器之外,还有什么方法可以做到这一点?(撤消取消搁置操作并将搁架放回原处,或者查看补丁文件中的内容)
ack(grep用Perl编写的工具)找不到找到的文件,grep -r我找不到合适的选项让它工作.以下显示ack未找到目标字符串,该字符串位于子目录中的常规文件中.它在Bash shell(Ubuntu 11.04)上:
100 $ grep -r imbue *
hel/find: the fact that some shells including Bash imbue braces
## Note: grep find it as shown in the above.
101 $ ./ack-standalone imbue
## Note: ack didn't find it as shown in the above.
102 $ ./ack-standalone --version
ack 1.96
Running under Perl 5.10.1 at /usr/bin/perl
Copyright 2005-2011 Andy Lester.
This program is free software. You may modify or distribute it
under …Run Code Online (Sandbox Code Playgroud) 此问题讨论了JFrame扩展到Windows任务栏的已知错误. 答案链接到错误报告(具有各种重复项)并提供解决方法.我发现问题也适用于JDialogs.JFrame解决方法不适用.是否有类似的解决方法使JDialogs在Windows上表现自己?
示例代码:
import javax.swing.*;
public class Demo extends JDialog {
public Demo() {
setSize(250,12500);
setVisible(true);
}
public static void main(String[] args) {
new Demo();
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
看起来这不会在JDK中修复. 此错误报告以"如果开发人员想要在屏幕上完全显示其窗口,他们应该考虑检查屏幕插图本身[如下面的解决方案] "并以不同方式重新布局其组件的评论结束.在调用pack()之后手动重新调整窗口大小,或者使用支持screen-insets的布局管理器[与BorderLayout和GridBagLayout等更常见的布局管理器不同].
当我通过许多手动冲突解决方案进行合并时,有时我意识到在提交之前我犯了一个或两个文件错误。在没有重新开始并重做整个合并之前,如何让Mercurial弹出单个文件的合并工具,让我重做手动冲突解决方案?
只有在没有冲突的情况下自动完成合并时,rebaseif mercurial扩展才会自动执行该过程.(如果存在要手动解决的冲突,则不会进行rebase,让您准备手动合并两个分支.)当开发人员在代码的不同部分工作时,这会简化并线性化历史记录,尽管任何rebase都会抛出当开发人员开始工作时,远离一些关于世界状况的信息.我倾向于喜欢争执同意这个和这个,在一般情况下,垫底是不是一个好主意,但我觉得底垫,如果理念呼吁非冲突情况.虽然我明白当代码的不同部分发生变化时仍然存在逻辑错误的风险(并且rebaseif扩展的作者已经认为这是一个坏主意.)
我最近经历了一个复杂而痛苦的二等分,我认为在我们的存储库中有大量的短分支合并是bisect没有达到其隐含的O(lg n)承诺的主要原因.我发现自己需要多次运行"bisect --extend",将范围扩展到合并之外,一次进行几个变更集,主要是将二等分O(n).我还发现,跟踪bisect的进展情况以及了解到目前为止我获得的信息非常复杂,因为在查看存储库的图表时我无法遵循分支.
是否有更好的方法来使用bisect(以及查看和理解修订历史),或者我是否正确,如果我们在开发中使用了更多的rebaseif,那么这个过程会更顺畅.或者,您是否可以帮助我更具体地了解在非冲突情况下使用rebase可能出现的问题:是否可能导致应该避免的问题?
我更普遍地标记这个(不仅仅是mercurial)因为我认为rebaseif匹配更典型的git工作流:git用户可能已经看到了陷阱.
我有一个抽象类,只有一个具体的方法.在这个方法中,我想使用派生自声明方法的类的静态类变量.为此,我当然也必须在抽象类中声明这个静态变量.
调用该方法时,变量将解析为抽象基类中的变量,而不是派生类中的变量.我是否需要使用属性修饰派生类的属性?
我是在尝试做一些Java不支持的事情,还是我只是缺少某些东西?
KeyStroke.getKeyStroke(String) (例如,getKeyStroke("control DELETE"))的文档没有提供如何访问 Macintosh 命令键的示例,并且我找不到列出诸如“control”之类的修饰符的各种单词的拼写的参考该函数接受。命令键的语法是什么?
作为参考,这里是 getKeylines 的文档:
解析一个字符串并返回一个KeyStroke. 该字符串必须具有以下语法:
<修饰符>* (<typedID> | <pressedReleasedID>) 修饰符 := 移位 | 控制| Ctrl | 元| 替代| 替代图 typedID := typed <typedKey> typedKey := 长度为 1 的字符串,给出 Unicode 字符。 PressedReleasedID :=(按下|释放)键 key := KeyEvent 按键代码名称,即“VK_”后面的名称。
如果未指定键入、按下或释放,则假定按下。这里有些例子:
"INSERT" => getKeyStroke(KeyEvent.VK_INSERT, 0);
“控制删除” => getKeyStroke(KeyEvent.VK_DELETE, InputEvent.CTRL_MASK);
"alt shift X" => getKeyStroke(KeyEvent.VK_X, InputEvent.ALT_MASK | InputEvent.SHIFT_MASK);
"alt shift 已释放 X" => getKeyStroke(KeyEvent.VK_X, InputEvent.ALT_MASK | InputEvent.SHIFT_MASK, true);
“输入 a” => getKeyStroke('a');
我看到新的Desktop类(我想用它的浏览(uri)方法)包括检查以验证它是否受支持.如果我正在为多个操作系统分发我的应用程序,我是否应该期望它有时不受支持,并坚持像"Bare Bones Browser Launch"这样的代码作为后备方法,或者这是非常罕见的?任何特定的操作系统,我可能会遇到问题?
(我正在分发Mac/Win/Solaris/Linux,但如果您对它们有所了解,请随时回答有关任何特殊操作系统的问题.)