我知道很多像这样的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;
}
答案 0 :(得分:1)
在我看来,这不是一个很好的泛型用例。如果用户想要String
,他们可以使用返回String
的方法。如果他们想要URI
,他们可以使用返回URI
的方法。如果在编写方法时无法确定该方法可以用于的所有不同类型,或者该方法是否用于许多不同类型,则泛型将更合适。
但是,您可以按如下方式减少代码重复
public static String getSanitizedURIString(String theUrl) {
return getSanitizedURI(theUrl).toASCIIString();
}
请注意,如果NullPointerException
返回getSanitizedURI
,则会抛出null
。您可能更喜欢以不同方式处理此情况,例如按照@ViacheslavVedenin的建议返回theUrl
。