gpt4 book ai didi

java - 在java函数中传递类作为参数

转载 作者:行者123 更新时间:2023-12-02 05:04:23 26 4
gpt4 key购买 nike

我试图将Java类作为函数中的参数传递,其背后的原因是我有几个针对不同API的pojo类,并且我试图为所有API URL和pojo类创建一个解析器实用程序,我已经尝试过几乎没有成功。

下面是代码示例 -

   public class util {

public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
List<JsonGenMovies> jsongen = null;
String url = "http://www.dishanywhere.com/radish/v20/dol/movies/carousels/featured.json?nkey=0e1345ee597cf280c8a2cde367b6b894";
getMovieParser(jsongen, url);

List<JsonGenShow> jsongenShow = null;
String URL = "http://www.dishanywhere.com/radish/v20/dol/shows/carousels/featured.json";
getShowParser(jsongenShow, URL);
}

public static String[] getMovieParser (List<JsonGenMovies> jsongen, String url ) throws JsonParseException, JsonMappingException, IOException
{
URL jsonUrl = new URL(url);
ObjectMapper objmapper = new ObjectMapper();
jsongen = objmapper.readValue(jsonUrl, new TypeReference<List<JsonGenMovies>>() {});
String[] shows = new String [jsongen.size()];
int i = 0;
for(JsonGenMovies element : jsongen) {
shows[i++]=element.getName();
}
for(int j =0; j<shows.length;j++)
{
System.out.println(shows[j]);
}
return shows;
}

public static String[] getShowParser (List<JsonGen> jsongenShow, String URL ) throws JsonParseException, JsonMappingException, IOException
{
URL jsonUrl = new URL(URL);
ObjectMapper objmapper = new ObjectMapper();
jsongenShow = objmapper.readValue(jsonUrl, new TypeReference<List<JsonGen>>() {});
String[] shows = new String [jsongenShow.size()];
int i = 0;
for(JsonGen element : jsongenShow) {
shows[i++]=element.getName();
}
for(int j =0; j<shows.length;j++)
{
System.out.println(shows[j]);
}
return shows;
}
}

在行中 -

jsongen = objmapper.readValue(jsonUrl, new TypeReference<List<JsonGen>>() {});

我还有<List<JsonGen>>我试图用参数替换的硬编码类名。如果你能帮忙的话请。

请回复并做一些解释,我可能不喜欢内衬。

问候石

最佳答案

如果我理解正确的话,你想要一个函数而不是两个或多个。
您可以使用通用类型

来做到这一点

例如

public static <T> String[] getParser(List<T> jsongen, String url) throws JsonParseException, JsonMappingException, IOException {
URL jsonUrl = new URL(url);
ObjectMapper objmapper = new ObjectMapper();
jsongen = objmapper.readValue(jsonUrl, new TypeReference<List<T>>() {
});

String[] shows = new String[jsongen.size()];
int i = 0;
for (T element : jsongen) {
shows[i++] = element.getName();
}

for (int j = 0; j < shows.length; j++) {
System.out.println(shows[j]);
}
return shows;
}

如果 JsonGenMoviesJsonGen 都扩展/实现了接口(interface)或类,例如 JsonGenMovies extends Json 那么你可以这样做:

public static <T extends Json> String[] getParser(List<T> jsongen, String url)

T 是泛型类型,它并不真正存在,但会在运行时被用于 jsongen arg 的 Class 替换。

例如:

List<String> myList;
getParser(myList, "http://blablabla.blalb.com");

所有 T 均替换为 String

我希望这就是您正在寻找的。
您可以找到有关泛型类型的更多解释 here有比我更好的解释。

编辑:

如果你想保留 POJO 模式,那么你可以尝试这个(不确定是否有效)

public static String[] getParser(List<?> jsongen, String url) throws Exception {
URL jsonUrl = new URL(url);
ObjectMapper objmapper = new ObjectMapper();
jsongen = objmapper.readValue(jsonUrl, new TypeReference<List<?>>() {
});
String[] shows = new String[jsongen.size()];
int i = 0;
for (Object element : jsongen) {
Method method = element.getClass().getMethod("getName");
shows[i++] = (String) method.invoke(element);
}

for (int j = 0; j < shows.length; j++) {
System.out.println(shows[j]);
}

return shows;
}

关于java - 在java函数中传递类作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27927058/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com