小编Yis*_*hai的帖子

什么时候Java泛型要求<?扩展T>而不是<T>并且是否存在切换的缺点?

给出以下示例(使用带有Hamcrest匹配器的JUnit):

Map<String, Class<? extends Serializable>> expected = null;
Map<String, Class<java.util.Date>> result = null;
assertThat(result, is(expected));  
Run Code Online (Sandbox Code Playgroud)

这不能使用JUnit assertThat方法签名编译:

public static <T> void assertThat(T actual, Matcher<T> matcher)
Run Code Online (Sandbox Code Playgroud)

编译器错误消息是:

Error:Error:line (102)cannot find symbol method
assertThat(java.util.Map<java.lang.String,java.lang.Class<java.util.Date>>,
org.hamcrest.Matcher<java.util.Map<java.lang.String,java.lang.Class
    <? extends java.io.Serializable>>>)
Run Code Online (Sandbox Code Playgroud)

但是,如果我将assertThat方法签名更改为:

public static <T> void assertThat(T result, Matcher<? extends T> matcher)
Run Code Online (Sandbox Code Playgroud)

然后编译工作.

所以有三个问题:

  1. 为什么当前版本没有编译?虽然我模糊地理解这里的协方差问题,但如果必须的话,我当然无法解释它.
  2. assertThat方法更改为Matcher<? extends T>?是否有任何缺点?如果你这样做,还有其他案例会破裂吗?
  3. assertThat在JUnit 中对方法进行泛化是否有任何意义?该Matcher级似乎并不需要它,因为JUnit的调用matches方法,它不与任何普通类型的,只是看起来像一个企图迫使一个类型安全这并不做任何事情,因为Matcher实际上只会不匹配,无论如何测试都会失败.不涉及不安全的操作(或似乎如此).

供参考,以下是JUnit的实现assertThat:

public static <T> void assertThat(T actual, Matcher<T> matcher) {
    assertThat("", …
Run Code Online (Sandbox Code Playgroud)

java generics junit

191
推荐指数
6
解决办法
31万
查看次数

SecureRandom线程安全吗?

SecureRandom线程安全的?也就是说,在初始化之后,可以访问依赖的下一个随机数是线程安全的吗?检查源代码似乎表明它是,并且这个错误报告似乎表明它缺乏文档作为线程安全是一个javadoc问题.有人确认它实际上是线程安全的吗?

java thread-safety

97
推荐指数
2
解决办法
2万
查看次数

抽象类是否应该具有serialVersionUID

在java中,如果一个类实现Serializable但是是抽象的,它是否应该声明一个longVersionUID,或者子类只需要它?

在这种情况下,确实意图是所有子类都处理序列化,因为该类型的目的是在RMI调用中使用.

java serialization abstract-class serialversionuid

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

标准API中是否存在自然比较器?

我需要一个比较器作为策略模式的一部分,可以使用对象的自然顺序或一些自定义顺序.对于自然排序的情况,我写了一个简单的比较器:

private static class NaturalComparator<T extends Comparable<? super T>> implements Comparator<T> {
    @Override
    public int compare(T o1, T o2) {
        return o1.compareTo(o2);
    }
}
Run Code Online (Sandbox Code Playgroud)

看起来很简单,但我想知道是否有人知道标准API中的一个.我查看了TreeMap,它没有这样的类,所以当编写代码时,明显的答案是否定的,但也许稍后会添加.

java comparable comparator

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

使用Java模拟触摸命令

我想更改二进制文件的修改时间戳.这样做的最佳方式是什么?

打开和关闭文件是一个不错的选择吗?(我需要一个解决方案,在每个平台和JVM上更改时间戳的修改).

java file touch

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

如何从表中的列中删除默认值?

如何更改列以删除默认值?

该列创建时使用:

 ALTER table sometable Add somecolumn nchar(1) NOT NULL DEFAULT 'N'
Run Code Online (Sandbox Code Playgroud)

然后改为:

 alter table sometable alter column somecolumn nchar(1) null
Run Code Online (Sandbox Code Playgroud)

这允许空值,但默认值仍然存在.你怎么能删除它?

t-sql sql-server-2005

48
推荐指数
4
解决办法
6万
查看次数

有谁知道iText的分叉?

现在iText已经走了AGPL,我假设有人会采用旧的(2.1.7或4.2.0)代码并将其分叉以保持LGPL版本的运行.有没有人知道这样的叉子已经开始了?

java pdf itext

45
推荐指数
3
解决办法
9568
查看次数

了解C#字段初始化要求

考虑以下代码:

public class Progressor
{
    private IProgress<int> progress = new Progress<int>(OnProgress);

    private void OnProgress(int value)
    {
        //whatever
    }
}
Run Code Online (Sandbox Code Playgroud)

这会在编译时出现以下错误:

字段初始值设定项不能引用非静态字段,方法或属性'Progressor.OnProgress(int)'

我理解它所抱怨的限制,但我不明白为什么它是一个问题,但该字段可以在构造函数中初始化,如下所示:

public class Progressor
{
    private IProgress<int> progress;

    public Progressor()
    {
         progress =  new Progress<int>(OnProgress);
    }

    private void OnProgress(int value)
    {
        //whatever
    }
}
Run Code Online (Sandbox Code Playgroud)

关于字段初始化与构造函数初始化需要此限制的C#有什么区别?

c# initialization

33
推荐指数
4
解决办法
2851
查看次数

为什么默认情况下正则表达式贪婪?

对于初学者编写正则表达式来说,这似乎是一个巨大的混乱源,可能会导致隐藏的性能问题,并且看起来典型的用例将是非贪婪的.

这只是出于遗留原因(它是如何首次完成的,每个实现都复制了),还是有原因的?

regex language-design regex-greedy

31
推荐指数
3
解决办法
2386
查看次数

错误的路径警告,它来自哪里?

当我使用编译器警告(JDK 1.5)编译我的项目时,我收到一堆错误的路径元素警告:

警告:: [path]坏路径元素"C:\ Users\User\MyJava\common\lib\junit.jar":没有这样的文件或目录警告:: [路径]坏路径元素"C:\ Users\User\MyJava\common\lib\jdom.jar":没有这样的文件或目录警告:: [path]坏路径元素"C:\ Users\User\MyJava\common\lib\xerces.jar":没有这样的文件或目录警告:: [path]坏路径元素"C:\ Users\User\MyJava\common\lib\xml-apis.jar":没有这样的文件或目录

还有很多.

这是使用IDEA 8.1.3.在IDEA的配置中找不到任何地方(我对整个项目进行了深思熟虑),其中任何内容都指向这些文件.他们在这个名字下确实不存在,但是什么引用了它们?

java compiler-warnings

25
推荐指数
2
解决办法
1万
查看次数