小编bla*_*ide的帖子

什么时候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万
查看次数

用于ping HTTP URL以获取可用性的首选Java方法

我需要一个监视器类来定期检查给定的HTTP URL是否可用.我可以使用Spring TaskExecutor抽象来处理"常规"部分,因此这不是主题.问题是:在java中ping URL的首选方法什么?

这是我当前的代码作为起点:

try {
    final URLConnection connection = new URL(url).openConnection();
    connection.connect();
    LOG.info("Service " + url + " available, yeah!");
    available = true;
} catch (final MalformedURLException e) {
    throw new IllegalStateException("Bad URL: " + url, e);
} catch (final IOException e) {
    LOG.info("Service " + url + " unavailable, oh no!", e);
    available = false;
}
Run Code Online (Sandbox Code Playgroud)
  1. 这有什么好处(它会做我想要的)吗?
  2. 我必须以某种方式关闭连接吗?
  3. 我想这是一个GET请求.有没有办法发送HEAD

java url http ping

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

Java中私有静态变量的用途是什么?

如果变量声明为public static varName;,那么我可以从任何地方访问它ClassName.varName.我也知道静态成员由类的所有实例共享,并且不会在每个实例中重新分配.

声明变量与声明变量有private static varName;什么不同private varName;

在这两种情况下,它都不能ClassName.varName作为ClassInstance.varName任何其他类访问.

将变量声明为静态会给它带来其他特殊属性吗?

java variables static private

147
推荐指数
8
解决办法
28万
查看次数

JUnit与TestNG

在工作中,我们目前仍在使用JUnit 3来运行我们的测试.我们一直在考虑切换到JUnit 4进行新的测试,但我一直在关注TestNG.您对JUnit 4或TestNG有什么经验,对于大量的测试似乎更好?编写测试的灵活性对我们来说也很重要,因为我们的功能测试涵盖了广泛的方面,需要以各种方式编写才能获得结果.

旧的测试不会被重写,因为他们的工作做得很好.我希望在新测试中看到的是测试编写方式的灵活性,自然断言,分组和易于分布的测试执行.

java testing junit testng

120
推荐指数
10
解决办法
4万
查看次数

如何打印格式化的BigDecimal值?

我有一个BigDecimal字段amount代表钱,我需要打印其值在浏览器的格式一样$123.00,$15.50,$0.33.

我怎样才能做到这一点?

(我认为自己唯一的简单解决方案是floatValue从分数部分开始BigDecimal,然后使用NumberFormat两位数的精度).

java formatting bigdecimal number-formatting

93
推荐指数
5
解决办法
16万
查看次数

Spring Boot中的@ComponentScan和@EnableAutoConfiguration有什么区别?

Spring Boot中的注释@ComponentScan@EnableAutoConfiguration注释有什么区别?是否有必要添加这些?没有这些注释,我的应用程序工作得很好.我只想了解为什么要添加它们.

java spring spring-mvc spring-boot

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

在Java中并行化任务的最简单方法是什么?

说我有一个类似的任务:

for(Object object: objects) {
    Result result = compute(object);
    list.add(result);
}
Run Code Online (Sandbox Code Playgroud)

并行化每个compute()的最简单方法是什么(假设它们已经可并行化)?

我不需要一个严格符合上述代码的答案,只需一般答案.但是如果您需要更多信息:我的任务是IO绑定的,这是针对Spring Web应用程序的,任务将在HTTP请求中执行.

java parallel-processing multithreading

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

如何读取属性文件并使用项目Gradle脚本中的值?

我正在处理Gradle脚本,我需要读取local.properties文件并使用属性文件中的值build.gradle.我是以下面的方式做的.我运行下面的脚本,它现在抛出一个错误,但它也没有做任何事情,如创建,删除和复制文件.我试图打印变量的值,它显示正确的值.

如果这是正确的方法,有人可以告诉我吗?我认为另一种方法是定义所有内容并在其中gradle.properties使用它build.gradle.有人可以告诉我如何build.gradle从中访问属性build.properties

build.gradle 文件:

apply plugin: 'java'

//-- set the group for publishing
group = 'com.true.test'

/**
 * Initializing GAVC settings
 */
def buildProperties = new Properties()
file("version.properties").withInputStream {
        stream -> buildProperties.load(stream)
}
//if jenkins build, add the jenkins build version to the version. Else add snapshot version to the version.
def env = System.getenv()
if (env["BUILD_NUMBER"]) buildProperties.test+= ".${env["BUILD_NUMBER"]}"
version = buildProperties.test
println "${version}"

//name is set in …
Run Code Online (Sandbox Code Playgroud)

java groovy gradle

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

使用Objective-C在iOS警报消息中添加换行符

一个菜鸟问题.

我有一个提醒:

"alertMessage" = "This is my message:    1  2  3.  And another one: 5 6 7";
Run Code Online (Sandbox Code Playgroud)

我正在展示:

NSString *asd = NSLocalizedString (@"alertMessage", @"");
NSString *alertTitle = NSLocalizedString (@"alertTitle", @"");

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:alertTitle message:asd delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
Run Code Online (Sandbox Code Playgroud)

我如何实现换行,以便"另一个:"从第二行开始.

谢谢!

objective-c uialertview ios ios5

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

在Vim中,如何删除引号之间的所有内容,包括引号?

例如,在以下内容中:

Testing "deleting" within quotes
Run Code Online (Sandbox Code Playgroud)

将光标置于删除范围内,如何删除引号内的文本并包含引号,留下:

Testing within quotes
Run Code Online (Sandbox Code Playgroud)

vim

24
推荐指数
2
解决办法
7102
查看次数