- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
根据URI javadoc getPath
方法返回“此 URI 的解码路径组件,如果路径未定义则返回 null”(强调)。这会让我相信,如果我的应用程序依赖于 getPath
的返回值,我可能需要检查它是否为 null
。然而,这似乎永远不可能发生。
下面的代码展示了我尝试构造一个 URI
对象的尝试,该对象的 getPath
返回 null,但是如您所见,我还没有发现这样的情况。有人可以解释一下这是怎么发生的吗?
编辑:我注意到 mailto
URI 没有路径。 但是,我真正想问的是:是否有一个 URI使用具有未定义/空路径的 http、https、ftp 或文件方案?
import java.net.URI;
import java.net.URISyntaxException;
public class URIGetPathNullTest {
public static void main(String []args) throws Exception {
test1();
test2();
test3();
test4();
test5();
test6();
test7();
}
public static void test1() throws URISyntaxException {
String urlString = "";
URI uri = new URI(urlString);
printUri(uri);
// Output:
// toString() -->
// getPath -->
// getPath null? false
}
public static void test2() throws URISyntaxException{
String scheme = null;
String ssp = null;
String fragment = null;
URI uri = new URI(
scheme,
ssp,
fragment
);
printUri(uri);
// Output:
// toString() -->
// getPath -->
// getPath null? false
}
public static void test3() throws URISyntaxException {
String scheme = null;
String userInfo = null;
String host = null;
int port = -1;
String path = null;
String query = null;
String fragment = null;
URI uri = new URI(
scheme,
userInfo,
host,
port,
path,
query,
fragment
);
printUri(uri);
// Output:
// toString() -->
// getPath -->
// getPath null? false
}
public static void test4() throws URISyntaxException {
String scheme = null;
String host = null;
String path = null;
String fragment = null;
URI uri = new URI(
scheme,
host,
path,
fragment
);
printUri(uri);
// Output:
// toString() -->
// getPath -->
// getPath null? false
}
public static void test5() throws URISyntaxException {
String scheme = null;
String authority = null;
String path = null;
String query = null;
String fragment = null;
URI uri = new URI(
scheme,
authority,
path,
query,
fragment
);
printUri(uri);
// Output:
// toString() -->
// getPath -->
// getPath null? false
}
public static void test6() throws URISyntaxException {
String urlString = "?some-query";
URI uri = new URI(urlString);
printUri(uri);
// Output:
// toString() --> ?some-query
// getPath -->
// getPath null? false
}
public static void test7() throws URISyntaxException {
String urlString = "#some-fragment";
URI uri = new URI(urlString);
printUri(uri);
// Output:
// toString() --> #some-fragment
// getPath -->
// getPath null? false
}
public static void printUri(URI uri) {
System.out.println("toString() --> " + uri.toString());
System.out.println("getPath --> " + uri.getPath());
System.out.println("getPath null? " + (uri.getPath() == null));
}
}
最佳答案
我正在阅读 RFC2956并注意到我只想到与 http/ftp/文件方案对应的 URI。 mailto
URI 就是一个没有路径的例子。
public static void test8() throws URISyntaxException {
String urlString = "mailto:mduerst@ifi.unizh.ch";
URI uri = new URI(urlString);
printUri(uri);
// Output:
// toString() --> mailto:mduerst@ifi.unizh.ch
// getPath --> null
// getPath null? true
}
编辑:与news
方案类似。
public static void test9() throws URISyntaxException {
String urlString = "news:comp.infosystems.www.servers.unix";
URI uri = new URI(urlString);
printUri(uri);
// Output:
// toString() --> news:comp.infosystems.www.servers.unix
// getPath --> null
// getPath null? true
}
(我在下面合并了我的其他答案)
the beginning of the URI javadoc 上有一条很好的线索:
An opaque URI is an absolute URI whose scheme-specific part does not begin with a slash character ('/'). Opaque URIs are not subject to further parsing. Some examples of opaque URIs are:
mailto:java-net@java.sun.com
news:comp.lang.java
urn:isbn:096139210x
当且仅当 URI
不透明时,getPath
似乎返回 null,这很容易用 isOpaque
method 进行检查.因此,如果我确保 URI 不是不透明的,那么我就不需要检查 getPath
的结果是否为 null
。
查看 source for java.net.URI在 openjdk 7-b147 中,我注意到 path
字段的注释,然后查看了 isOpaque
的源代码,这似乎证实了这一点:
private transient String path; // null ==> opaque
// ...
public boolean isOpaque() {
return path == null;
}
关于java - java.net.URI 对象的 getPath 方法是否有可能返回 null? (如果是,什么时候?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18519260/
降本手段一招鲜,增效方法吃遍天; 01 互联网行业里; 降本策略千奇百怪,手段却出奇一致;增效方法五花八门,手段更是花里胡哨; 对于企业来说;
有什么方法可以使用 angularjs 中的部分进行代码分组吗? 原因 --- 我的 Controller 包含太多代码。该 Controller 包含了多个方法和大量功能的代码,降低了代码的可读性。
不幸的是,我的数据库的数据模型必须改变,所以我正在寻找最轻松的方式来迁移我的数据。 此时情况如何: create table cargo{ id serial primary key, per
在 QTextEdit 对象中,假设我想知道字符在鼠标光标下的位置。 我会写... void MyQTextEditObject::mousePressEvent(QMouseEvent* mouse
是否可以在 C++ 中返回一个 return 语句或做一些具有类似功能的事情? 例如,如果代码中有几个函数将指针作为输入,并且每个函数都检查指针是否为 nullptr,这将很方便。如果它是一个 nul
我的 PC 上有一个控制台应用程序,它是 signalR 服务器。 我有一个 html 页面,它是互联网上的 signalR 客户端。但我尝试连接服务器,但我有一个错误的请求 400 错误。如果服务器
我想将应用程序作为后台进程运行。当点击应用程序图标时,它不会显示任何 View ,只会启动后台进程。 最佳答案 对于 iOS 这是不可能的,但是对于 android,react native 有 he
我知道有(昂贵的)框架可以让你在 VS C# 中编写 android 应用程序并将其编译为 android apk。 我也知道,可以在 VS 中编写 Java 应用程序(link)。 是否有可能,甚至
我在做: can :manage, :all if user.role == 'admin' can :approve, Anuncio do |anuncio| anuncio.try(:apr
我是一名优秀的程序员,十分优秀!