Java是否有定义80、443等常用端口号的常量类?
Java中常用端口号的常量定义问题
嘿,这个问题我之前也纠结过!Java标准类库中并没有直接定义80、443、21这类常用协议默认端口的常量。这其实是因为JDK的设计偏向通用基础能力,这类属于特定应用层协议的默认端口,并没有被纳入标准API的常量体系——毕竟像你提到的StandardCharsets.UTF_8这种属于通用基础组件,和协议端口的定位不太一样。
你说的通过URL的getDefaultPort()方法获取,确实是标准库中唯一能间接拿到这些值的路径,但为了个端口号去构造URL对象,确实有点小题大做,太繁琐了。
那怎么解决代码里的魔法数字问题呢?最实用的做法就是自己封装一个简单的工具类,把这些常用端口定义成静态常量,示例代码如下:
public class CommonPorts { // HTTP 默认端口 public static final int HTTP = 80; // HTTPS 默认端口 public static final int HTTPS = 443; // FTP 默认端口 public static final int FTP = 21; // 按需扩展其他常用端口 public static final int SSH = 22; public static final int SMTP = 25; }
之后在代码里直接用CommonPorts.HTTP就清晰多了,还能根据自己的业务需求随时扩展其他端口。
另外提一句,如果你的项目已经引入了第三方工具库(比如Apache Commons Net),里面其实已经预定义了不少这类端口常量,比如DefaultProtocols.HTTP_PORT、DefaultProtocols.HTTPS_PORT之类的,但如果只是为了几个端口号额外引入依赖,反而有点得不偿失,自己写个轻量的工具类反而更省心。
内容的提问来源于stack exchange,提问作者Krzysztof Krasoń
相关产品推荐
相关产品推荐

