在 Matlab 调用的 java 方法中使用可变参数
Use of varargs into java method called by Matlab
我用 eclipse 创建了一个 jar 文件,在这个文件中有一个 class 用这个方法
public Response getJsonFromRest(String urlstr, String... queryParams)
我的目标是 return 一个基于 urlstr 参数的 Rest 调用结果的对象。为了创建一个通用方法,我使用了 String...queryParams 所以我可以使用这个方法而不考虑查询参数的数量。当我在 eclipse 中调用此方法时,我可以使用 0,1 或很多查询参数,但是当我从 matlab 调用此方法时,我必须为 getJsonFromRest 设置两个参数,一个用于 urlstr e 一个查询参数。
为什么不能在 matlab 中使用可变参数?
这是代码
public Response getJsonFromRest(String urlstr, String... queryParams) {
URL url;
try {
//check if there are query params.
if (queryParams.length==0)
url = new URL(urlstr);
else
url = new URL(addQueryParam(urlstr, queryParams));
HttpURLConnection conn =
(HttpURLConnection) url.openConnection();
if (conn.getResponseCode() != 200) {
return new Response(conn.getResponseCode(), conn.getResponseMessage());
}
// Buffer the result into a string
BufferedReader rd = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line;
while ((line = rd.readLine()) != null) {
sb.append(line);
}
rd.close();
conn.disconnect();
return new Response(conn.getResponseCode(), sb.toString());
} catch (IOException e) {
//417 for exception
return new Response(417, e.getMessage());
}
}
private String addQueryParam(String urlstr, String... queryParams){
String symbol="?";
String newUrl=urlstr;
for (String param:queryParams){
newUrl+=symbol+param;
symbol="&";
}
System.out.println(newUrl);
return newUrl;
}
当您创建一个 Java 方法时,该方法接受带省略号 (...
) 的可变参数,例如:
public Response getJsonFromRest(String urlstr, String... queryParams)
Java 实际上生成了一个方法,该方法采用数组作为可变参数,如下所示:
public Response getJsonFromRest(String urlstr, String[] queryParams)
当您使用多个参数从 Java 调用此方法时,会自动为您创建一个数组并将其作为第二个参数传递,但 Matlab 不理解这一点。您必须在 Matlab 中使用您的参数显式创建一个数组,并将其作为第二个参数传递给 Java 方法。
我用 eclipse 创建了一个 jar 文件,在这个文件中有一个 class 用这个方法
public Response getJsonFromRest(String urlstr, String... queryParams)
我的目标是 return 一个基于 urlstr 参数的 Rest 调用结果的对象。为了创建一个通用方法,我使用了 String...queryParams 所以我可以使用这个方法而不考虑查询参数的数量。当我在 eclipse 中调用此方法时,我可以使用 0,1 或很多查询参数,但是当我从 matlab 调用此方法时,我必须为 getJsonFromRest 设置两个参数,一个用于 urlstr e 一个查询参数。 为什么不能在 matlab 中使用可变参数?
这是代码
public Response getJsonFromRest(String urlstr, String... queryParams) {
URL url;
try {
//check if there are query params.
if (queryParams.length==0)
url = new URL(urlstr);
else
url = new URL(addQueryParam(urlstr, queryParams));
HttpURLConnection conn =
(HttpURLConnection) url.openConnection();
if (conn.getResponseCode() != 200) {
return new Response(conn.getResponseCode(), conn.getResponseMessage());
}
// Buffer the result into a string
BufferedReader rd = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line;
while ((line = rd.readLine()) != null) {
sb.append(line);
}
rd.close();
conn.disconnect();
return new Response(conn.getResponseCode(), sb.toString());
} catch (IOException e) {
//417 for exception
return new Response(417, e.getMessage());
}
}
private String addQueryParam(String urlstr, String... queryParams){
String symbol="?";
String newUrl=urlstr;
for (String param:queryParams){
newUrl+=symbol+param;
symbol="&";
}
System.out.println(newUrl);
return newUrl;
}
当您创建一个 Java 方法时,该方法接受带省略号 (...
) 的可变参数,例如:
public Response getJsonFromRest(String urlstr, String... queryParams)
Java 实际上生成了一个方法,该方法采用数组作为可变参数,如下所示:
public Response getJsonFromRest(String urlstr, String[] queryParams)
当您使用多个参数从 Java 调用此方法时,会自动为您创建一个数组并将其作为第二个参数传递,但 Matlab 不理解这一点。您必须在 Matlab 中使用您的参数显式创建一个数组,并将其作为第二个参数传递给 Java 方法。