Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 删除编译器';s方法调用发出警告,需要建议_Java_Warnings - Fatal编程技术网

Java 删除编译器';s方法调用发出警告,需要建议

Java 删除编译器';s方法调用发出警告,需要建议,java,warnings,Java,Warnings,作为Utils课程的一部分,我有两个 public static boolean isStringEmptyOrNull(String... s) { 测试空条件时 assertTrue(Utils.isStringEmptyOrNull(null)); 我得到“对于从类型Utils调用varargs方法IsStringImptyorNull(String…)而言,null类型的参数应显式转换为String[],也可以转换为字符串进行varargs调用”警告 不过,我还是不想做任何事情。此测

作为Utils课程的一部分,我有两个

public static boolean isStringEmptyOrNull(String... s) {
测试空条件时

assertTrue(Utils.isStringEmptyOrNull(null));
我得到“对于从类型Utils调用varargs方法IsStringImptyorNull(String…)而言,null类型的参数应显式转换为String[],也可以转换为字符串进行varargs调用”警告

不过,我还是不想做任何事情。此测试旨在模拟传递给方法的参数为null的情况

有没有办法在不更改方法签名的情况下删除此警告?

您可能应该测试这两种情况:

assertTrue(Utils.isStringEmptyOrNull(new String[] { null }));
assertTrue(Utils.isStringEmptyOrNull((String[]) null));
。。。老实说,虽然我不清楚为什么一个听起来应该只接受一个字符串的方法首先要接受一个字符串数组

(对你来说,没有演员阵容的那些调用中的哪一个是显而易见的吗?对我来说,这并不明显……我必须查一下。)

你可能应该测试这两种情况:

assertTrue(Utils.isStringEmptyOrNull(new String[] { null }));
assertTrue(Utils.isStringEmptyOrNull((String[]) null));
。。。老实说,虽然我不清楚为什么一个听起来应该只接受一个字符串的方法首先要接受一个字符串数组


(对你来说,没有演员阵容的那些调用中的哪一个是显而易见的吗?对我来说,这并不明显……我必须查一下。)

这样更改测试:

String nullString = null;
assertTrue(Utils.isStringEmptyOrNull(nullString));

很奇怪,为什么您首先要使用vararg方法来处理这个问题

这样更改您的测试:

String nullString = null;
assertTrue(Utils.isStringEmptyOrNull(nullString));

很奇怪,为什么您首先要使用vararg方法来处理这个问题

如果您试图模仿库函数的客户机调用代码的方式,您应该利用这样一个事实,即他们不会使用文本“null”来调用此特定方法(这有什么意义?)

相反,它们会传入一些变量或表达式。既然如此,您可以这样做并避免施放:

String nullString = null;
assertTrue(Utils.isStringEmptyOrNull(nullString));

如果您试图模仿库函数的客户机调用代码的方式,那么您应该利用这样一个事实,即他们不会使用文本“null”来调用此特定方法(这有什么意义?)

相反,它们会传入一些变量或表达式。既然如此,您可以这样做并避免施放:

String nullString = null;
assertTrue(Utils.isStringEmptyOrNull(nullString));

您可以明确地告诉编译器使用忽略警告。

您可以明确地告诉编译器使用忽略警告。

那么,警告的存在是有原因的:当您使用null参数调用方法时,因为null是Java中的所有和任何类型(包括数组),编译器实际上不知道您是使用数组还是非数组对象调用var args方法(使用var args参数时,每个对象的处理方式都不同)。您可以使用SuppressWarnings(“All”)对方法进行注释,然后在使用参数执行任何操作之前测试null。警告的存在是有原因的:当您使用null参数调用方法时,因为null在Java中是All和any类型(包括Array),编译器实际上不知道您是使用数组还是非数组对象调用var args方法(使用var args参数时,每个对象的处理方式都不同)。您可以使用SuppressWarnings(“All”)对该方法进行注释,然后在使用参数执行任何操作之前测试null

@SixHouse OP可能是英国的。@SixHouse OP可能是英国的。