注释受保护的字段的正确/首选方法是什么,ReadWriteLock以便像FindBugs这样的工具可以利用注释?应该ReadWriteLock简单地在@GuardedBy注释中写下名称.是否有理由在@GuardedBy注释中写入只读锁的名称,或只写写锁?不FindBugs的,或其他工具,甚至支持ReadWriteLock的@GuardedBy?
File file = new File(path);
if (!file.delete())
{
throw new IOException(
"Failed to delete the file because: " +
getReasonForFileDeletionFailureInPlainEnglish(file));
}
Run Code Online (Sandbox Code Playgroud)
那里getReasonForFileDeletionFailureInPlainEnglish(file)已经有很好的实施吗?否则我只需要自己写.
我发现JSLint会产生很多关于表单的警告:
Expected 'foo' to have an indentation at X instead at Y.
Run Code Online (Sandbox Code Playgroud)
所述的JSLint选项文档描述了一种indent识别表示的空间缩进的每个级别的量的数值选项.这个选项允许我说每个级别的缩进使用2个空格.我只是在我的JavaScript文件的顶部写这样的东西:
/*jslint indent: 2 */
Run Code Online (Sandbox Code Playgroud)
太好了.现在JSLint知道每个缩进级别缩进多少,但JSLint似乎是硬编码来决定每行应该具有什么级别的缩进.
假设我想以不同于JSLint规定的方式缩进我的代码.我可以使用一些JSLint选项吗?如果没有,我至少可以关闭缩进警告吗?我试过了:
/*jslint indent: false */
Run Code Online (Sandbox Code Playgroud)
但这并没有导致缩进警告被忽略; 它导致了JSLint错误.
我正在编写一个非常简单的RMI服务器,我java.rmi.NoSuchObjectExceptions在单元测试中看到间歇性的.
我在同一个对象上有一串远程方法调用,而前几个调用完成后,后面的调用有时会失败.我没有做任何事情来取消注册服务器对象.
这些错误并不总是出现,如果我输入断点,它们往往不会出现.是那些Heisenbugs,当通过调试器的执行速度减慢来查看它们时,它们的竞争条件会消失吗?我的测试或服务器代码中没有多线程(尽管可能在RMI堆栈内部?).
我通过Eclipse的JUnit插件在Mac OS X 10.5(Java 1.5)上运行它,并且RMI服务器和客户端都在同一个JVM中.
什么可以导致这些例外?
在Eclipse中,我想在Java 默认构造函数上设置断点.我不能简单地双击任何代码行的左边,因为默认构造函数没有源代码 - 它们是由Java编译器隐式生成的.
我希望能够在不修改现有代码的情况下设置这样的断点.
从概念上讲,我一直在决定我的项目的异常处理结构.
假设你有一个例子:
public abstract class Data {
public abstract String read();
}
Run Code Online (Sandbox Code Playgroud)
还有两个子类FileData,它从一些指定的文件读取你的数据,而StaticData,它只返回一些预定义的常量数据.
现在,在读取文件时,可能会在FileData中抛出IOException,但StaticData将永远不会抛出.大多数样式指南建议将Exception传播到调用堆栈,直到有足够的上下文可用于有效处理它.
但我真的不想在抽象的read()方法中添加throws子句.为什么?因为Data和使用它的复杂机器对文件一无所知,所以它只知道数据.此外,可能还有其他数据子类(以及更多这些子类)从不抛出异常并完美地传递数据.
另一方面,IOException是必要的,因为如果磁盘不可读(或某些此类),则必须抛出错误.所以我看到的唯一出路就是捕获IOException并在其位置抛出一些RuntimeException.
这是正确的哲学吗?
我有一个文件目录,我想使用Apache Ant(Linux上的1.7.1版)进行"就地"字符串过滤.
例如,假设在目录中mydir我所拥有的文件foo,bar和baz.进一步假设正则表达式的所有出现都OLD([0-9])应该改变为NEW\1例如OLD2→ NEW2.(请注意,replaceAnt任务不起作用,因为它不支持正则表达式过滤.)
可以使用以下Bash命令创建此测试情况(ant将在当前目录中运行,即mydir父目录):
mkdir mydir
for FILE in foo bar baz ; do echo "A OLD1 B OLD2 C OLD3" > mydir/${FILE} ; done
Run Code Online (Sandbox Code Playgroud)
这是我第一次尝试使用Ant进行过滤:
<?xml version="1.0"?>
<project name="filter" default="filter">
<target name="filter">
<move todir="mydir">
<fileset dir="mydir"/>
<filterchain>
<tokenfilter>
<replaceregex pattern="OLD([0-9])" replace="NEW\1" flags="g"/>
</tokenfilter>
</filterchain>
</move>
</target>
</project>
Run Code Online (Sandbox Code Playgroud)
运行第一个Ant脚本对文件没有影响mydir.默认情况下,该overwrite参数true包含moveAnt任务.我甚至摆弄了这个granularity设置,但这没有用.
这是我的第二次尝试,"有效",但由于临时文件创建而略显烦人.此版本通过将内容移动到带有 …
.emacs.el多年来我在我的文件中有这些功能:
(defun dos2unix ()
"Convert a DOS formatted text buffer to UNIX format"
(interactive)
(set-buffer-file-coding-system 'undecided-unix nil))
(defun unix2dos ()
"Convert a UNIX formatted text buffer to DOS format"
(interactive)
(set-buffer-file-coding-system 'undecided-dos nil))
Run Code Online (Sandbox Code Playgroud)
这些函数允许我轻松地在格式之间切换,但我不知道如何配置Emacs默认情况下以一种特定格式写入,无论我使用哪个平台.就像现在一样,当我在Windows上运行时,Emacs以Windows格式保存; 当我在UNIX/Linux中运行时,Emacs以UNIX格式保存.
无论我运行的平台如何,我都想指示Emacs以UNIX格式编写.我该怎么做呢?
我是否应该添加一些调用这些函数之一的文本模式钩子?例如,如果我在Windows上,那么dos2unix在找到文本文件时调用?
是否有维护模式注释的项目?
例如,当我编写构建器时,我想用它来标记它@Builder.
以这种方式进行注释会立即提供代码实现的清晰概念.此外,@Builder注释的Javadoc 可以引用构建器模式的解释.此外,@Builder通过使用注释@Builder,可以轻松地从构建器实现的Javadoc导航到Javadoc @Documented.
我正在减慢为我的代码中的模式和习语积累一小部分这样的注释,但是我想利用一个更完整的现有项目(如果存在的话).如果没有这样的项目,也许我可以通过将其分解为单独的模式/习语注释项目来分享我拥有的内容.
更新:我已经创建了Pattern Notes项目以回应此讨论.欢迎捐款!这是@Builder
每当我用鼠标从一台显示器拖动到另一台显示器时,我的Java Swing应用程序窗口就会消失.当我拖动它时它是可见的,但是当我释放鼠标按钮时它会立即消失.我宁愿窗户没有消失.为什么它会消失?
当我激活Mission Control时,Swing Window出现在桌面底部,我拖动它.取消激活任务控制会使其从屏幕底部滑落.
我运行的Java Swing应用程序无关紧要.对于那些想要代码的人来说,这是一个简单的Java Swing应用程序,它展示了我正在描述的行为,享受:
import java.awt.*;
import javax.swing.*;
class SimpleSwing {
public static void main(final String... args) {
SwingUtilities.invokeLater(new Runnable() {
@Override public void run() {
JFrame frame = new JFrame();
JPanel contentPane = new JPanel();
contentPane.add(new JLabel("Hello World!"));
frame.setContentPane(contentPane);
frame.pack();
frame.setVisible(true);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
我的环境是Mac OS X Yosemite上的Oracle Java JDK(撰写本文时的最新版本)(撰写本文时最新):
java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)
OS X Yosemite Version 10.10.2 (14C1510) …Run Code Online (Sandbox Code Playgroud) java ×7
annotations ×2
exception ×2
formatting ×2
ant ×1
breakpoints ×1
concurrency ×1
eclipse ×1
emacs ×1
end-of-line ×1
file-io ×1
findbugs ×1
jdk1.6 ×1
jdk6 ×1
jslint ×1
macos ×1
rmi ×1
swing ×1
text-files ×1