[Ljava.lang.String;无法转换为java.lang.String

[Ljava.lang.String;无法转换为java.lang.String,java,variadic-functions,Java,Variadic Functions,我的DAO中有以下代码,它返回一个[Ljava.lang.String;无法转换为java.lang.String异常 我想知道为什么会有这样的原因和解决办法 public Collection<Testdoc> findTestId(int idTest, String... testtype) { StringBuffer buf = new StringBuffer("SELECT w FROM Testdoc w WHERE w.Test.idTest = :idTe

我的DAO中有以下代码,它返回一个[Ljava.lang.String;无法转换为java.lang.String异常 我想知道为什么会有这样的原因和解决办法

public Collection<Testdoc> findTestId(int idTest, String... testtype) {
    StringBuffer buf = new StringBuffer("SELECT w FROM Testdoc w WHERE w.Test.idTest = :idTest");           
    buf.append("AND w.testtype IN ( :testtype ) ");         
    return findByQuery(buf.toString(), "idTest", idTest, "testtype ", testtype );
}
公共集合findTestId(int-idTest,String…testtype){
StringBuffer buf=新StringBuffer(“从Testdoc w中选择w,其中w.Test.idTest=:idTest”);
buf.append(“和w.testtype IN(:testtype)”);
返回findByQuery(buf.toString(),“idTest”,idTest,“testtype”,testtype);
}

findByQuery的最后一个参数的类型似乎是
String
。您使用了
String[]

String…
作为最后一个参数类型表示
String[]
但允许调用方使用
fn(“x”、“y”、“z”)
而不是
fn(新字符串[]{x”、“y”、“z})

@user85421指出,
findByQuery
很可能声明如下:

Collection<Testdoc> findByQuery(String sql, String... args);
集合findByQuery(字符串sql、字符串…args);
在这种情况下,您可能需要连接参数,尽管这可能仍然不正确


然后需要连接数组。如果没有
arrays.concat
,请参见问题。

如果不知道第二个参数的含义/作用,为什么要将其声明为
varargs参数?提示:它会将参数转换为数组。
[Ljava.lang.String;
字符串[]
的内部类名。这是否回答了您的问题?