什么时候在Java中使用Long vs Long?
以下是我的界面-
public interface IDBClient { public String read(ClientInput input);
}
这是我对接口的实现-
public class DatabaseClient implements IDBClient { @Override
public String read(ClientInput input) {
}
}
现在我有一个工厂,它得到这样的实例DatabaseClient
-
IDBClient client = DatabaseClientFactory.getInstance();....
现在,我需要调用接受参数read
的my方法,下面是相同的类。本课不是我写的,所以这是我对此有疑问的原因,我非常确定这是错误的做法。DatabaseClient``ClientInput
public final class ClientInput { private Long userid;
private Long clientid;
private Long timeout_ms = 20L;
private boolean debug;
private Map<String, String> parameterMap;
public ClientInput(Long userid, Long clientid, Map<String, String> parameterMap, Long timeout_ms, boolean debug) {
this.userid = userid;
this.clientid = clientid;
this.parameterMap = parameterMap;
this.timeout_ms = timeout_ms;
this.debug = debug;
}
}
因此,当客户调用的read
方法时DatabaseClient
,他们将ClientInput
像这样创建参数,然后使用工厂获取的实例,DatabaseClient
然后相应地调用read方法。
Map<String, String> paramMap = new HashMap<String, String>();paramMap.put("attribute", "segmentation");
ClientInput input = new ClientInput(109739281L, 20L, paramMap, 1000L, true);
IDBClient client = DatabaseClientFactory.getInstance();
client.read(input);
- 所以我的第一个问题是确实的
userid
,clientid
,timeout_ms
应该是Long
对象或者只是long
在ClientInput
上课吗? - 第二个问题我已经是,有可能是客户可以通过错误的信息,比如
negative user ids
,negative client id
,negative timeout
价值等等等等。那么,我应该这样做验证?我应该在ClientInput
类的构造函数中还是在其他地方进行此验证检查?这样做的更好方法是什么,我应该如何进行验证?
回答:
我认为没有一个正确的答案。一些建议:
我看到之间最大的区别
long
,并Long
在这方面是Long
可能null
。如果有可能您缺少值,则该Long
对象将很有帮助,因为它null
可以指示值丢失。如果您使用的是原语,则必须使用一些特殊的值来表示缺失,这很可能会一团糟。除非您计划制作一百万个这样的数组然后进行序列化,否则速度或大小不太可能成为问题。我对验证逻辑的偏爱是
ValidationException
在事情可能失败的时候抛出某种习惯。如果您只是使用构造函数创建这些东西,那么最简单的方法就是在那里进行验证,例如public ClientInput(Long userid, Long clientid, Map<String, String> parameterMap, Long timeout_ms, boolean debug) throws ValidationException {
if (userid == null) throw new ValidationException("UserId is required");
...etc, etc...
}
最终,ValidationException
仅当您可以在可以使用它做一些有用的事情时将其捕获时才有用-将其回显给用户或其他任何用户。
以上是 什么时候在Java中使用Long vs Long? 的全部内容, 来源链接: utcz.com/qa/415565.html