静态方法vs新类

时间:2014-03-03 06:46:00

标签: java class static-methods

在我的程序中,我有一个“团队”类,用于保存团队中每个对象的数据。 现在我正在尝试创建一个“Team”对象的ArrayList,但我想知道创建一个新类是否更好的做法,或者我是否应该在“Team”的静态方法中执行该任务。 / p>

我已经搜索了答案,但只找到了静态问题/非静态问题/答案的比较。我对使用静态方法创建新类时更感兴趣的地方。

感谢您的帮助

编辑:主要是我在这里要问的是“dataExtract”和“hasTeam”方法(如下面的代码所示)是应该在他们自己的类中,还是作为静态方法保存。

import java.util.ArrayList;

public class Team {
String country;
String skaterNames;
int points;

    public Team(String cntr, String sktrNames, int point){
        country = cntr;
        skaterNames = sktrNames;
        points = point;
    }

    public Team(){}

    public static ArrayList<Team> dataExtract(FileInput file){
        ArrayList<Team> al = new ArrayList<Team>();
        while (file.hasMoreData()){
            String tempLine = file.readLine();
            if (hasTeam(al, tempLine.substring(0, 3)) == -1){
                al.add(new Team(tempLine.substring(0, 3), tempLine.substring(3, 30).trim(), Integer.parseInt(tempLine.substring(37))));
            }
            else {
                al.get(hasTeam(al, tempLine.substring(0, 3))).skaterNames += (", "+ tempLine.substring(3, 30).trim()); 
                al.get(hasTeam(al, tempLine.substring(0, 3))).points += Integer.parseInt(tempLine.substring(37));
            }
        }
        return al;
    }
    public static int hasTeam(ArrayList<Team> al, String team){
        for (int i =0; i<al.size(); i++){
            if (((Team) al.get(i)).country.equalsIgnoreCase(team))
            return i;

        }
        return -1;
    }
}

2 个答案:

答案 0 :(得分:1)

你应该为可重用性创建非静态类,创建子类的能力等等。如果你有类似“团队”的东西(无论可能指的是什么),通常认为制作团队类更好的做法并创建它的几个实例。鉴于您正在创建多个Team对象,使用静态方法/字段只会太混乱和无组织。

答案 1 :(得分:1)

在这种特殊情况下,静态方法可能没问题。非静态的优点将是未来的编辑(即,如果类增长任何改变非常数字段或引用它们将成为错误源的东西)并且通常是整洁的。将方法保存在变量中可以让您获得一个非常有用的生活变化变量。但是,在您的特定情况下,这不是该课程的目的。

Static使方法可调用,而无需创建类的对象。有时这可能很好,例如所有Math类方法(Math.round,Math.ceil等)。仅当方法仅使用自己的参数时才应使用静态。即便如此,有时最好不要让它保持静态。它保持清洁,你总是知道你在编辑什么。

如果静态方法使用在构造函数中初始化的变量,则可能存在问题。如果未初始化此类的对象,则不初始化构造函数。这可能会导致不良副作用和程序错误。

一般情况下,如果类只是一个完全独立的方法的外壳,则只使用静态。