Java方法约定

时间:2013-04-09 14:11:55

标签: java coding-style

我一直有一个基本的问题。 也许它太微不足道了 - 但我决定得到一个意见。

下面是示例代码:

class seventeenth{

    public static void appendtolist(List<Integer> i){
        i.add(new Random().nextInt(1000));
        i.add(new Random().nextInt(1000));
        i.add(new Random().nextInt(1000));
    }
    public static List<Integer>  returnlist(){
        List<Integer> i=new LinkedList<Integer>();
        i.add(new Random().nextInt(1000));
        i.add(new Random().nextInt(1000));
        i.add(new Random().nextInt(1000));
        return i;
    }
    public static void main(String[] args){
        List<Integer> l=new LinkedList<Integer>();
        appendtolist(l);//Option 1
        l=returnlist();//Option 2
        for(Integer e:l)
        System.out.println(e);
    }

}

上面哪个选项是一个很好的编程习惯,为什么?或者它真的没关系? 如果有人可以分享关于这样的基本良好编程惯例的任何文献,我将不胜感激。

7 个答案:

答案 0 :(得分:3)

两者都很好,只要名称使功能清晰。

“追加”版本更为通用,因为它可以多次调用以附加到同一列表中。以这种方式使用“返回”版本需要将所有内容复制两次。

我可能会将“附加到”版本概括为任何Collection

public static void addTo(Collection<Integer> coll) {
    coll.add(random.nextInt(1000));
    coll.add(random.nextInt(1000));
    coll.add(random.nextInt(1000));
}

答案 1 :(得分:2)

一个好的做法是尽可能多地重用对象,而不是

i.add(new Random().nextInt(1000));
i.add(new Random().nextInt(1000));

你会改用

Random rand = new Random();
i.add(rand.nextInt(1000));
i.add(rand.nextInt(1000));

使用第一种方法,您需要创建和垃圾收集两个Random对象的开销,而第二种方法只创建并垃圾收集一个Random对象。

答案 2 :(得分:0)

选项2,

public static List<Integer>  returnlist(){
    List<Integer> i=new LinkedList<Integer>();
    i.add(new Random().nextInt(1000));
    i.add(new Random().nextInt(1000));
    i.add(new Random().nextInt(1000));
    return i;
}

我认为要好得多,除非你想继续在列表l中添加更多元素。

答案 3 :(得分:0)

这取决于功能的含义,第一个工作是更改列表,另一个是构建一个。
我会使用方法重载来允许任何选项而不需要代码重复:

public static List<Integer> addRandom(List<Integer> i){
    i.add(new Random().nextInt(1000));
    i.add(new Random().nextInt(1000));
    i.add(new Random().nextInt(1000));
    return i;
}
public static List<Integer> addRandom() {
    return addRandom(new LinkedList<Integer>());
}
public static void main(String[] args){
    List<Integer> l=new LinkedList<Integer>();
    addRandom(l);//Option 1
    l = addRandom();//Option 2
    for(Integer e:l)
    System.out.println(e);
}

同样,它们没有相同的含义,但如果你真的想比较两个注释,那就是returnList强制执行List(LinkedList)和事实

答案 4 :(得分:0)

对方法名称使用驼峰大小写并使用 pascal大小写作为类名也是不错的做法。  
1 GT;您的方法都是多次创建new Random()对象。应该避免。
2 - ;数字生成不应该像1000那样硬编码。将来你可能需要2000 3 GT;在returnList方法中,您只返回LinkedList。但是将来你可能需要它返回Vector,ArrayList。所以与代码紧密相关。它不灵活。

  

哪个好的

的问题

我总是更喜欢appendToList,因为我可以传递该方法中的任何对象,如Vector,ArrayList或LinkedList。

对方法进行修改可能对良好实践有用。

import java.util.LinkedList;
import java.util.List;
import java.util.Random;

class Seventeenth {

    public static void appendToList(Random random, List<Integer> list, int[] numbers) {
        for (int i : numbers) {
            list.add(random.nextInt(i));
        }
    }

    public static void main(String[] args) {
        List<Integer> list = new LinkedList<Integer>();
        Random random = new Random();
        appendToList(random, list, new int[] { 1, 2, 3, 1000, 2000 });// Option 1
        for (int e : list)
            System.out.println(e);
    }

}

答案 5 :(得分:0)

IMO我更喜欢returnlist种类,因为我试图避免操纵方法的参数,因为这些更改将从代码的整个流程中“隐藏”,这可能会导致以后的意外行为。但是,由于方法名称为appendtolist,因此很清楚将要发生的事情,因此这两种方法都适合我。

答案 6 :(得分:0)

最好不要改变一个论点,这就是我选择SECOND变体的原因。

除逻辑外,您的方法不应执行任何操作并返回值here

有关side effects

的更多信息