我在导航Java规则以推断泛型类型参数时遇到了一些麻烦.考虑以下类,它具有可选的list参数:
import java.util.Collections;
import java.util.List;
public class Person {
private String name;
private List<String> nicknames;
public Person(String name) {
this(name,Collections.emptyList());
}
public Person(String name,List<String> nicknames) {
this.name = name;
this.nicknames = nicknames;
}
}
Run Code Online (Sandbox Code Playgroud)
我的Java编译器给出以下错误:
Person.java:9: The constructor Person(String, List<Object>) is undefined
Run Code Online (Sandbox Code Playgroud)
但是Collections.emptyList()返回类型<T> List<T>,而不是List<Object>.添加演员表无济于事
public Person(String name) {
this(name,(List<String>)Collections.emptyList());
}
Run Code Online (Sandbox Code Playgroud)
产量
Person.java:9: inconvertible types
Run Code Online (Sandbox Code Playgroud)
使用EMPTY_LIST而不是emptyList()
public Person(String name) {
this(name,Collections.EMPTY_LIST);
}
Run Code Online (Sandbox Code Playgroud)
产量
Person.java:9: warning: [unchecked] unchecked conversion
Run Code Online (Sandbox Code Playgroud)
而以下更改会使错误消失:
public Person(String name) …Run Code Online (Sandbox Code Playgroud) 我有一些方法可以调用System.exit()某些输入.不幸的是,测试这些情况会导致JUnit终止!将方法调用放在新线程中似乎没有帮助,因为System.exit()终止JVM,而不仅仅是当前线程.是否有任何常见的处理方式?例如,我可以替换存根System.exit()吗?
[编辑]有问题的类实际上是一个命令行工具,我试图在JUnit中测试.也许JUnit根本不适合这份工作?建议使用补充回归测试工具(最好是与JUnit和EclEmma完美集成的东西).
假设我想使用su或在现有的Emacs会话中打开一个文件sudo,而不是直接转到shell并执行sudoedit或sudo emacs.一种方法是
C-x C-f /sudo::/path/to/file
Run Code Online (Sandbox Code Playgroud)
[编辑] @JBB是对的.我希望能够调用su/ sudo保存以及打开.在保存时重新授权是可以的(但不是理想的).我正在寻找的是变化find-file,并save-buffer认为可能是"管道"通过su/ sudo.
我正在使用一个解析器生成器,它创建了一些丑陋的代码.因此,我的Eclipse项目有几十个警告来自生成的源文件.我知道我可以使用@SuppressWarning注释来抑制特定元素中的特定警告,但是当解析器生成器再次运行时,我手动添加的任何注释都将丢失.有没有办法配置Eclipse来禁止特定文件或目录的警告?
为了节省一些打字并澄清我的代码,是否有以下方法的标准版本?
public static boolean bothNullOrEqual(Object x, Object y) {
return ( x == null ? y == null : x.equals(y) );
}
Run Code Online (Sandbox Code Playgroud) 在GNOME终端中,Bash执行智能自动完成功能.例如
apt-get in<TAB>
Run Code Online (Sandbox Code Playgroud)
变
apt-get install
Run Code Online (Sandbox Code Playgroud)
在Emacs shell模式下,即使在我明确提供源代码后,此自动完成也不起作用/etc/bash_completion.上面的示例in在当前目录中使用文件名而不是有效的apt-get命令选项粘贴或自动完成.据推测,这是因为Emacs正在拦截Tab键按下.如何启用智能自动完成功能shell-mode?
使用mail TO_ADDR来自的电子邮件中的结果从Unix命令行发送消息$USER@$HOSTNAME.有没有办法更改插入的"发件人:"地址mail?
为了记录,我在Ubuntu上使用GNU Mailutils 1.1/1.2(但我看到了与Fedora和RHEL相同的行为).
[编辑]
$ mail -s Testing chris@example.org Cc: From: foo@bar.org Testing .
产量
Subject: Testing To: <chris@example.org> X-Mailer: mail (GNU Mailutils 1.1) Message-Id: <E1KdTJj-00025z-RK@localhost> From: <chris@localhost> Date: Wed, 10 Sep 2008 13:17:23 -0400 From: foo@bar.org Testing
"From:foo@bar.org"行是邮件正文的一部分,而不是标题的一部分.
对于一系列合格调用的Eclipse格式化规则(即Builder模式样式),我非常沮丧.例如,以下是我创建新的Apache Commons CLI Options对象的一些代码的首选格式:
Options options = new Options()
.addOption(OPTION_HELP_SHORT, OPTION_HELP, false, "print usage information")
.addOption(OPTION_VERSION_SHORT, OPTION_VERSION, false,
"print version and exit")
.addOption(OptionBuilder.withLongOpt(OPTION_PROPERTIES)
.hasArg()
.withArgName("FILE")
.withType(File.class)
.withDescription("specify a user properties file")
.create());
Run Code Online (Sandbox Code Playgroud)
即,参数在必要时被包装和缩进,除非必要,所有合格的调用都被包装并缩进(如果有多个).如果参数列表包含在限定调用内,则调用应首先包装.
Eclipse中的默认格式(参数和调用"仅在必要时换行")会产生以下混乱:
Options options = new Options().addOption(
OPTION_HELP_SHORT, OPTION_HELP, false, "print usage information")
.addOption(OPTION_VERSION_SHORT, OPTION_VERSION, false,
"print version and exit").addOption(
OptionBuilder.withLongOpt(OPTION_PROPERTIES).hasArg().withArgName(
"FILE").withType(File.class).withDescription(
"specify a user properties file").create());
Run Code Online (Sandbox Code Playgroud)
进入"Java代码样式 - >格式化程序 - >行换行"和换行设置为"包装所有元素,除了第一个元素,如果没有必要",调用产生:
Options options = new Options().addOption(
OPTION_HELP_SHORT, OPTION_HELP, false, "print usage information")
.addOption(OPTION_VERSION_SHORT, OPTION_VERSION, false,
"print …Run Code Online (Sandbox Code Playgroud) 在List中将List拆分为两个子列表的最简单,最标准和/或最有效的方法是什么?改变原始列表是可以的,因此不需要复制.方法签名可以是
/** Split a list into two sublists. The original list will be modified to
* have size i and will contain exactly the same elements at indices 0
* through i-1 as it had originally; the returned list will have size
* len-i (where len is the size of the original list before the call)
* and will have the same elements at indices 0 through len-(i+1) as
* the original list had at indices i through len-1.
*/ …Run Code Online (Sandbox Code Playgroud) 我在Java中有一套相当复杂的泛型类.例如,我有一个界面
interface Doable<X,Y> {
X doIt(Y y);
}
Run Code Online (Sandbox Code Playgroud)
和实施
class DoableImpl implements Doable<Foo<Bar<Baz,Qux>>,Foo<Bar<Zot,Qux>>> {
Foo<Bar<Baz,Qux>> doIt(Foo<Bar<Zot,Qux>> fooBZQ) { ... }
}
Run Code Online (Sandbox Code Playgroud)
在实际实现中,Doable有不少方法Foo<Bar<Baz,Qux>>等等,一遍又一遍地出现.(信不信由你,通用类型比这更痛苦.我为这个例子简化了它们.)
我想简化这些,以节省自己的打字和缓解眼睛的压力.我想是有一个简单的"类型的别名"对Foo<Bar<Baz,Qux>>等的,说FooBBQ和FooBZQ.
我目前的想法是定义包装类:
class FooBBQ {
public static FooBBQ valueOf(Foo<Bar<Baz,Qux>> fooBBQ) {
return new FooBBQ(fooBBQ);
}
private Foo<Bar<Baz,Qux>> fooBBQ;
private FooBBQ(Foo<Bar<Baz,Qux>> fooBBQ) {
this.fooBBQ = fooBBQ;
}
public Foo<Bar<Baz,Qux>> toGeneric() {
return fooBBQ;
}
}
class FooBZQ { /* pretty much the same... */ }
class DoableImpl implements Doable<FooBBQ,FooBZQ> …Run Code Online (Sandbox Code Playgroud)