到哪里去';http';Java中的字符串文字?
创建URL,例如通过到哪里去';http';Java中的字符串文字?,java,Java,创建URL,例如通过 URL url = new URL("http", "localhost", "test.txt"); 我必须使用常量字符串“http”。在许多其他代码行中也是如此。我找不到任何包含这个字符串的常量(或者更好的是找到所有通用协议的常量集合) 是否存在协议的任何现有常量?创建一个类常量 类常量{ 公共静态最终字符串HTTP=“HTTP”; //其他这样的常数。。。 } 和使用一样 URL URL=newurl(Constants.HTTP,“localhost”,“tes
URL url = new URL("http", "localhost", "test.txt");
我必须使用常量字符串“http”。在许多其他代码行中也是如此。我找不到任何包含这个字符串的常量(或者更好的是找到所有通用协议的常量集合)
是否存在协议的任何现有常量?创建一个类常量
类常量{
公共静态最终字符串HTTP=“HTTP”;
//其他这样的常数。。。
}
和使用一样
URL URL=newurl(Constants.HTTP,“localhost”,“test.txt”);
或者,如果没有更多的常量,并且您希望在同一个类中使用它,则只在同一个类中使用该常量。如果字符串“http”必须始终代表值为“http”的java.string
,则间接地(通过常量)使用该字符串绝对没有理由。这与引入整数常量相同,如下所示:
static final int ONE = 1;
但是,在以下情况下,这是合理的:
- 变量的名称并不表示基础值是“http”:
//当前值为“http”,但可以更改为“ftp”、“spdy” //或者将来会发明更好的协议。 静态最终字符串协议=“http”;
- 如果预计其类型可能需要更改:
//此常量的类型可能更改为org.qwerty.Protocol //(但它将始终指定HTTP协议) 静态最终字符串HTTP=“HTTP”;
- 字符串明显长于引入的常量:
静态最终字符串HTTP=“超文本传输协议”;
- 该值很难记住或理解:
静态最终整数X_16KiB=16384;//虽然可以使用16*1024 静态最终字符串OMEGA=“\u2126”;
- 如果要在多个位置使用相同的值,并且希望在将来需要时在单个位置更改该值
- 避免使用幻数或其字符串对应项
HTTP:
然而,您看到的http:不是协议,而是方案。方案是协议的一部分,但不是协议。在这种情况下,它可能倾向于使用以下字符串文字常量
final String SCHEME = "http";
此外,如果您正在编写某种类型的服务客户端,它可以在多个协议上工作,那么您可能需要指定一个默认的服务客户端。在这种情况下,以下最后一个字符串文字将是合适的
final String DEFAULT_SCHEME = "http";
有人存在吗?
事实上,Apache确实有一个用于上述原因的http常量,这一事实支持下面的文本
org.apache.http.HttpHost.DEFAULT_SCHEME_NAME
这个常量也包含在旧的httpclient库中,当时它是apachecommons的一部分(现在是HttpComponent的一部分)
推荐
从Java9开始,http不存在JavaSE常量。我倾向于创建自己的常量,而不是使用Apache的。我建议这样做是因为Apache的默认\u SCHEME\u NAME常量专门指的是HttpHost类。将其用于其他用途违反了软件工程的单一目的原则。为了更加实用,HttpHost类可以在不更改默认方案的情况下更改其默认方案(可能)。这显然是一个问题。但是,JavaEE确实为所有HTTP方法、响应状态、头字段和无数其他与HTTP相关的内容(如身份验证类型等)提供了最终字符串文本。我同意您希望在Javas标准库中将这些字符串文本作为常量提供。这只会让我感觉更完整
后记
我想指出用户@gorootde在下面的评论中对最终字符串文本的另一种用法
榜样
最终字符串Z=“Z”代码>
如果在整个代码库中多次使用此结果,则此结果可能仍然有价值,而其他具有不同重要性的“Z”
。在不知道上下文的情况下,我无法判断,但这将是一个奇怪的选择,需要大量的理由,但从定义上讲,这并不是毫无意义的。Apache库中有一个常量字段http:
org.apache.http.HttpHost.DEFAULT_SCHEME_NAME
如果您在应用程序中使用此库,您可以在您的案例中使用它。您可以在项目中创建一个Constants类并在其中定义常量。有关请求方法的相关问题:+1,我还想知道是否有用于此的通用帮助器类(例如Spring的MediaType
或HttpStatus
)我的问题是,是否存在任何现有常量-我知道我可以很容易地