Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 选项类型变量和返回它们的方法的通用命名约定_Java_Scala_Guava_Java 8_Optional - Fatal编程技术网

Java 选项类型变量和返回它们的方法的通用命名约定

Java 选项类型变量和返回它们的方法的通用命名约定,java,scala,guava,java-8,optional,Java,Scala,Guava,Java 8,Optional,命名选项类型变量和返回选项类型以区别于非选项类型的方法有哪些 假设一个DAO当前有一个findById方法,该方法返回一个实体的实例或null,如果我们反对该方法并添加一个返回选项类型的方法,我们应该如何命名它 现在假设我们正在重构代码以使用这个新方法,我们不想用option类型替换对实体变量的所有引用,我们应该如何命名option类型变量 接口Dao{ @不赞成 实体findById(ID); //我们应该使用什么命名约定? 可选的maybeFindById(ID); } 公共类MyServi

命名选项类型变量和返回选项类型以区别于非选项类型的方法有哪些

假设一个DAO当前有一个
findById
方法,该方法返回一个实体的实例或null,如果我们反对该方法并添加一个返回选项类型的方法,我们应该如何命名它

现在假设我们正在重构代码以使用这个新方法,我们不想用option类型替换对实体变量的所有引用,我们应该如何命名option类型变量

接口Dao{
@不赞成
实体findById(ID);
//我们应该使用什么命名约定?
可选的maybeFindById(ID);
}
公共类MyService{
潘松道;
公共无效更改(最终长id、最终整数){
//最终人员=人员编号(id);
//if(person!=null)
//我们应该使用什么命名约定?
最终可选的maybePerson=personDao.maybeFindById(id);
if(可能是person.isPresent()){
final Person=maybePerson.get();
人.体位(年龄);
}
}

我认为这确实是一个基于观点的问题,因为不可能有任何权威或正确的答案

也就是说,我倾向于只命名通常返回
Optional
的方法,例如
Optional findById(Id)
。该方法实际上与返回
null
表示“无结果”的方法没有什么不同,只是返回类型使其更加明确


至于
可选的
变量,我倾向于将它们命名为
可选foo
…但一般来说,我认为如何命名局部变量(甚至字段)重要的不是你如何命名一个方法。

我认为在这里使用两种不同的方法不是一个好主意。如果对迁移有疑问,请保留旧方法

但有一种方法可以分两步重构整个代码:

首先,将接口更改为:

interface Dao<ENTITY ,ID> {
   ENTITY findById(ID id);
}
鉴于所有呼叫站点已从以下位置更改:

Person maybePerson = personDao.findById(id); // may be null
致:


这样一来,您首先拥有一个干净的
界面
,而另一个代码则可以像以前一样工作。然后,您可以逐个浏览调用站点,决定是否以及如何更改它们。这可能需要一些时间,但由于
界面
已经干净,并且命名约定问题已经解决,因此没有必要着急

请注意,您的示例方法应该如下所示:

public void changeAge(final Long id,final int age) {
    personDao.findById(id).ifPresent(person -> person.setAge(age));
}

请注意,在重构的旧代码和新代码这两种形式中,都不需要命名
Optional
类型的变量,因此不需要命名约定


当然,重构需要一个支持Java 8的工具。

告诉重构工具内联旧的、现在默认的findById方法“你不是通常通过其他方式内联吗?”将方法体放入其调用者的体中并删除该方法“不需要将变量命名为可选类型,因此不需要命名约定。"如果可选的来自一个方法参数呢?我知道一些IDE会阻止这样做,但这是完全可能的。在这种情况下,你需要命名它。我认为这个答案完全是固执己见的,并不能真正回答OP的问题。花了这么多时间来发明一个惯例,是吗?再说一次@Holger,你太固执己见了。除了你的编程风格之外,它们可能也是有效的,你有没有想过?
personOpt
maybePerson
是两个合理的名字,即使你不喜欢命名可选变量。@clintestwood你呢您可以拥有任意多的编码样式,但是如果您的个人编码样式需要命名约定,那么就由您来发明一种。Java维护人员和IDE开发人员都不推荐这种编码样式,因此,不要为不推荐的编码样式提供命名约定。因为这个问题是关于“通用命名约定”,正确的答案是,没有,不管用户克林特·伊斯特伍德可能会提出哪些个人命名约定。
Person maybePerson = personDao.findById(id); // may be null
Person maybePerson = personDao.findById(id).orElse(null);
public void changeAge(final Long id,final int age) {
    personDao.findById(id).ifPresent(person -> person.setAge(age));
}