解释警告:对于最后一个参数,使用不精确的参数类型的非变量调用varargs方法

Dex*_*ter 7 java

这是我的示例代码,我收到警告.

String lsSQL = foMetaQuery.getSQL();
String  lsNewSQL = replace(lsSQL,"'' {","''{");
lsNewSQL = replace(lsNewSQL," } ''","}''");
lsNewSQL = replace(lsNewSQL," }","}");
lsNewSQL  = MessageFormat.format(lsNewSQL,foSubstitutionArray);
loVSQueryDef.setSQL(lsNewSQL);
Run Code Online (Sandbox Code Playgroud)

编译说

转换为java.lang.Object以进行varargs调用强制转换为java.lang.Object []以进行非varargs调用并禁止此警告

lsNewSQL  = MessageFormat.format(lsNewSQL,foSubstitutionArray);
Run Code Online (Sandbox Code Playgroud)

Zas*_*tai 12

你没有显示什么类型foSubstitutionArray,但我认为它是一个除Object以外的类型的数组.

现在,MessageFormat.Format()是一个varargs方法,这意味着你可以传递任意数量的参数(嗯,至少1),Java将在内部将它们全部收集在一个对象数组中.但是,在这里你传入一个数组,所以Java感到困惑:你是试图传递一个参数(恰好是一个数组),还是你传入变量参数?

如果您打算传递一个参数(不太可能),请向Object添加一个强制转换:

MessageFormat.format(lsNewSql, (Object) foSubstitutionArray)
Run Code Online (Sandbox Code Playgroud)

如果您打算从数组中取值,则转换为Object []:

MessageFormat.format(lsNewSql, (Object[]) foSubstitutionArray)
Run Code Online (Sandbox Code Playgroud)