class Main{
//we can use class HttpClient
//https://www.youtube.com/watch?v=5MmlRZZxTqk
public static void main(String args[]) throws IOException, InterruptedException {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
// .GET() this line is optional because it is default
.header("accept","application/json")
.uri(URI.create("https://whatever.com"))
.build();
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
System.out.println(response.getClass().getName());
}
}
所以我读了BodyHandlers.ofString()方法的文档,我的理解是它会把响应变量的值解析成一个字符串。
System.out.println(response.getClass().getName());
结果是jdk.internal.net.http.HttpResponseImpl?我读到另一篇文章说,永远不要在idk.internal.* 中使用任何类,那么我做错了什么吗?
1条答案
按热度按时间wlsrxk511#
我做错什么了吗
这里没有任何错误,
HttpResponse
是接口,所以response.getClass()
可以返回任何实现HttpResponse
的实现(在本例中是HttpResponseImpl
)。我读过另一篇文章,上面说永远不要在idk. internal中使用任何类。*
这意味着你不应该直接在你的代码中声明/初始化这个类。例如,你不应该写这样的东西:
背后的原则是我们应该依赖于接口,而不是实现细节,更多细节可以在JEP 260中找到