作为我的Utils课程的一部分,我有两个
public static boolean isStringEmptyOrNull(String... s) {
测试空条件时
assertTrue(Utils.isStringEmptyOrNull(null));
我得到“类型为null的参数应该显式地转换为String [],以便从类型Utils调用varargs方法isStringEmptyOrNull(String ...)。它也可以转换为字符串以用于varargs调用“警告。
但是,我宁愿不做任何事情。此测试旨在模拟传递给方法的参数为空的条件。有没有办法在不改变方法签名的情况下删除此警告?
答案 0 :(得分:2)
你应该测试这两种情况:
assertTrue(Utils.isStringEmptyOrNull(new String[] { null }));
assertTrue(Utils.isStringEmptyOrNull((String[]) null));
...虽然我不清楚为什么一个听起来像它的方法应该只采用单个字符串的方法首先采用一串字符串,说实话。
(对你来说,没有演员的那些调用是否明显?这对我来说并不明显......我必须仔细查看。)
答案 1 :(得分:1)
如果你试图模仿库函数的客户端调用代码的方式,你应该利用它们不会用文字“null”调用这个特定方法的事实(那将是什么意思? )
相反,他们会传递一些变量或表达式。既然如此,你可以做这样的事情并避免投射:
String nullString = null;
assertTrue(Utils.isStringEmptyOrNull(nullString));
答案 2 :(得分:1)
您可以使用@SuppressWarnings("all")
明确告诉编译器忽略警告。
答案 3 :(得分:1)
那个警告是有原因的:当你用null参数调用你的方法时,由于null是Java中的所有类型(包括Array),编译器实际上不会知道你是否调用了var-args方法使用数组或非数组对象(当使用var-args参数时,每个对象都被不同地处理)。你可以做的是使用SuppressWarnings(“All”)注释方法,然后在对参数做任何事情之前测试null
答案 4 :(得分:0)
改变你的测试:
String nullString = null;
assertTrue(Utils.isStringEmptyOrNull(nullString));
相当好奇为什么你在第一时间使用vararg方法虽然......