从其他类访问main中的对象

时间:2014-07-13 22:02:33

标签: java

在我的主要课程中,我有public static Pet myPet = new Pet();。 我有另一节课#34;欢迎"我想从中访问myPet。我想在我的整个项目中使用这个对象(它是一个游戏,摇摆,这个宠物将成为主角)。我可以使用Main.myPet.setName();,但我不知道这是不是很好的做法。这对我来说似乎是最自然的。我不知道启动新窗口并将其作为参数传递是一个很好的解决方案。有没有其他方法可以访问这个对象,或者它可以这样离开吗?

6 个答案:

答案 0 :(得分:1)

如果您的对象仅在main方法中使用,请将其实例化为Pet myPet = new Pet();

如果要在主类中使用多个方法的对象,请将其声明为private static Pet myPet = new Pet();

但是,我建议你不要将对象实例化为类的静态实例,因为它不允许你正确测试。

答案 1 :(得分:0)

如果只有一只宠物"例如,你并不打算实施游戏保存等事情,我认为没有任何伤害。

静态字段有时可能被视为代码异味(不良做法),但如果应用程序非常简单,那么它不是问题,可以帮助提高可读性。

如果您打算添加游戏保存等,最好让一个类代表游戏状态,而宠物就是它的领域。然后传递这个,而不是宠物本身 - 你可以稍后在游戏中添加更多内容,然后将它们添加到游戏州级别。

答案 2 :(得分:0)

避免使用这样的静态变量,因为这将限制您可以对代码执行的操作,包括如何扩展或测试它(例如使用单元测试)。相反,尝试将大部分代码保留在静态世界和实例世界中。主要方法应该主要用于设置演员的位置,然后启动它们,其他几乎没有。如果需要类来共享对象,请在需要时传递引用。最重要的是,我不能强调这一点,在面向对象的编程原则上获得一本好书或几本书,并对其进行研究。

答案 3 :(得分:0)

通常通过创建访问器/ mutator(get和set方法)来实现,以便不将所有成员公开给每个其他对象。因此,pet必须是私有的,或实用程序类中的静态变量,也可以通过get和set访问。除非没有真正的理由让会员公开,否则请尽可能避免。这确保了封装,并且是设计规则的最佳实践。

答案 4 :(得分:0)

您可能需要考虑将Pet的类定义更改为singleton pattern,而不是将其定义为主类中的静态字段。例如:

public class Pet {
    private static volatile Pet instance = null;
    //other fields for Pet

    //Private constructor to prevent instantiation without calling getInstance
    private Pet() { }
    //getInstance ensures that only a single instance of the Pet class is instantiated
    public static Pet getInstance() {
        if (instance == null) {
            synchronized (Pet.class) {
                if (instance == null) {
                    instance = new Pet();
                }
            }
        }
        return instance;
    }
    //other methods for Pet
}

然后,您可以使用以下行在主类或任何其他类中使用它:

Pet myPet = Pet.getInstance();

第一次调用静态方法getInstance将创建一个新的Pet对象,但每次调用它之后它将返回Pet的同一个实例,实质上是创建一个全局可访问的实例Pet。但是,您应该在使用单一模式之前了解使用单例模式的优缺点。单身模式通常不受欢迎,但在某些情况下它可能很有用。

答案 5 :(得分:0)

您可以扩展欢迎类以访问上一课程中的信息。公共课欢迎延伸PetmyPet {。