小编Chr*_*way的帖子

Collections.emptyList()返回List <Object>?

我在导航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)

java generics type-inference

260
推荐指数
3
解决办法
20万
查看次数

Java:如何测试调用System.exit()的方法?

我有一些方法可以调用System.exit()某些输入.不幸的是,测试这些情况会导致JUnit终止!将方法调用放在新线程中似乎没有帮助,因为System.exit()终止JVM,而不仅仅是当前线程.是否有任何常见的处理方式?例如,我可以替换存根System.exit()吗?

[编辑]有问题的类实际上是一个命令行工具,我试图在JUnit中测试.也许JUnit根本不适合这份工作?建议使用补充回归测试工具(最好是与JUnit和EclEmma完美集成的东西).

java junit multithreading unit-testing testability

187
推荐指数
9
解决办法
8万
查看次数

在Emacs中使用su/sudo打开一个文件

假设我想使用su或在现有的Emacs会话中打开一个文件sudo,而不是直接转到shell并执行sudoeditsudo emacs.一种方法是

C-x C-f /sudo::/path/to/file
Run Code Online (Sandbox Code Playgroud)

但这需要通过SSH进行昂贵的往返.有更直接的方式吗?

[编辑] @JBB是对的.我希望能够调用su/ sudo保存以及打开.在保存时重新授权是可以的(但不是理想的).我正在寻找的是变化find-file,并save-buffer认为可能是"管道"通过su/ sudo.

emacs sudo file-permissions

171
推荐指数
6
解决办法
5万
查看次数

如何禁止特定目录或文件(如生成的代码)的Java警告

我正在使用一个解析器生成器,它创建了一些丑陋的代码.因此,我的Eclipse项目有几十个警告来自生成的源文件.我知道我可以使用@SuppressWarning注释来抑制特定元素中的特定警告,但是当解析器生成器再次运行时,我手动添加的任何注释都将丢失.有没有办法配置Eclipse来禁止特定文件或目录的警告?

java eclipse suppress-warnings generated-code

110
推荐指数
4
解决办法
3万
查看次数

是否有Java标准"无效或等于"静态方法?

为了节省一些打字并澄清我的代码,是否有以下方法的标准版本?

public static boolean bothNullOrEqual(Object x, Object y) {
  return ( x == null ? y == null : x.equals(y) );
}
Run Code Online (Sandbox Code Playgroud)

java null equals

98
推荐指数
3
解决办法
3万
查看次数

在Emacs shell模式下进行Bash自动完成

在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

emacs bash shell autocomplete

86
推荐指数
5
解决办法
3万
查看次数

在Unix"邮件"中更改"发件人:"地址

使用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"行是邮件正文的一部分,而不是标题的一部分.

unix email

84
推荐指数
7
解决办法
23万
查看次数

Builder模式的Eclipse格式化程序设置

对于一系列合格调用的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)

java eclipse code-formatting

38
推荐指数
3
解决办法
8358
查看次数

Java:将List拆分为两个子列表?

在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 list

36
推荐指数
3
解决办法
9万
查看次数

为Java泛型键入别名

我在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>>等的,说FooBBQFooBZQ.

我目前的想法是定义包装类:

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)

java generics casting

30
推荐指数
3
解决办法
1万
查看次数