gpt4 book ai didi

java - 如何使用泛型将这两种方法合二为一?

转载 作者:行者123 更新时间:2023-12-01 10:49:55 26 4
gpt4 key购买 nike

我知道很多像这样的 Java 泛型问题已经存在,例如( How to refactor two Java methods into one? ),但我想我只需要用我自己的、更简单的函数来查看它 - 并提供一个如何调用它的示例,以完全理解java泛型...我提前道歉并感谢您!

我所知道的是,我可能需要使用instanceof和Class.forName来处理不同的返回类型(并且可能为desiredClass添加第二个参数,或者可以在不添加第二个参数的情况下以某种方式推断出这一点?)

public static <T> T getSanitizedURI(String theUrl, Class desiredReturnType) {
}

然后呢?

public static URI getSanitizedURI(String theUrl) {
URI sanitizedUri = null;
try{
URL url = new URL(theUrl);
sanitizedUri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
} catch(Exception e) {
e.printStackTrace();
}
return sanitizedUri;
}

public static String getSanitizedURIString(String theUrl) {
String sanitizedUrl = theUrl;
try{
URL url = new URL(theUrl);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
sanitizedUrl = uri.toASCIIString();
} catch(Exception e) {
e.printStackTrace();
}
return sanitizedUrl;
}

最佳答案

在我看来,这对于泛型来说不是一个好的用例。如果用户想要一个String,他们可以使用返回String的方法。如果他们想要 URI,他们可以使用返回 URI 的方法。如果在编写方法时无法确定该方法可用于的所有不同类型,或者该方法要用于许多不同类型,则泛型会更合适。

但是,您可以按如下方式减少代码重复

public static String getSanitizedURIString(String theUrl) {
return getSanitizedURI(theUrl).toASCIIString();
}

请注意,如果 getSanitizedURI 返回 null,则会抛出 NullPointerException。您可能更愿意以不同的方式处理这种情况,例如按照 @ViacheslavVedenin 的建议返回 theUrl

关于java - 如何使用泛型将这两种方法合二为一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33977182/

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