Java 只有静态数据和访问这些数据的方法的类。如何正确地实施?
我知道这是个初学者的问题。我对java和编程都是新手 假设我得到一个只有静态数据的类,例如:Java 只有静态数据和访问这些数据的方法的类。如何正确地实施?,java,oop,static,static-methods,static-members,Java,Oop,Static,Static Methods,Static Members,我知道这是个初学者的问题。我对java和编程都是新手 假设我得到一个只有静态数据的类,例如: class Foo { private static int x; } 我希望在不实例化任何对象的情况下使用该类。因此,我希望能够做到: Foo.setX(5); Foo.getX(); 实现这个类的最佳方法是什么,我现在对接口和其他东西有点困惑 谢谢。我认为单身是你想要的: 单身人士类别: public class Singleton { private static final
class Foo {
private static int x; }
我希望在不实例化任何对象的情况下使用该类。因此,我希望能够做到:
Foo.setX(5);
Foo.getX();
实现这个类的最佳方法是什么,我现在对接口和其他东西有点困惑
谢谢。我认为单身是你想要的:
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
private int x;
// Private constructor prevents instantiation from other classes
private Singleton() {
}
public static Singleton getInstance() {
return INSTANCE;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
}
以及从代码中的任何位置访问:
int x = Singleton.getInstance().getX();
Singleton.getInstance().setX(10);
我认为单身是你想要的:
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
private int x;
// Private constructor prevents instantiation from other classes
private Singleton() {
}
public static Singleton getInstance() {
return INSTANCE;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
}
以及从代码中的任何位置访问:
int x = Singleton.getInstance().getX();
Singleton.getInstance().setX(10);
为什么不定义两个修改/返回静态字段的静态方法呢
为什么不定义两个修改/返回静态字段的静态方法呢
您可以随时让静态公共方法获取并设置为执行您想要的操作。但是再看一看,单例模式可能就是您想要的。您总是可以让静态公共方法获取并设置为执行您想要的操作。但是再看看,单例模式可能就是您想要的。您可以将
getX
和setX
方法定义为静态:
class Foo
{
private static int x;
public static int getX()
{
return x;
}
public static void setX(int x)
{
Foo.x = x;
}
}
然后,您可以在不实例化任何对象的情况下使用它:
Foo.setX(5);
int val = Foo.getX();
正如其他人所建议的那样,Singleton
是一种更干净的方法,尽管它不能满足您不实例化任何对象的要求
您可以将
getX
和setX
方法定义为静态:
class Foo
{
private static int x;
public static int getX()
{
return x;
}
public static void setX(int x)
{
Foo.x = x;
}
}
然后,您可以在不实例化任何对象的情况下使用它:
Foo.setX(5);
int val = Foo.getX();
正如其他人所建议的那样,Singleton
是一种更干净的方法,尽管它不能满足您不实例化任何对象的要求
因为我之前说过:“我想在不实例化任何对象的情况下使用类”,所以在定义静态方法时,不必实例化类来访问该方法。您只需编写Foo.GetX()。@m4design:我编辑了我的答案。请阅读本文以获得概述。因为我之前说过:“我希望在定义静态方法时使用类而不实例化任何对象”,所以不必实例化类来访问该方法。您只需编写Foo.GetX()。@m4design:我编辑了我的答案。请阅读本文以获得概述。@sbi 100%同意,单身是邪恶的!如果它是邪恶的,有更好的设计吗?或者我应该改变我的设计来解决我的问题?如果能看到完整的代码来给你提供建议,那就太好了。但是我觉得依赖注入会阻止你使用singleton。。。只是一种感觉;-)顺便说一句,如果你想得到详细的答案,这可能是一个完全不同的问题,所以…@sbi 100%同意,单身是邪恶的!如果它是邪恶的,有更好的设计吗?或者我应该改变我的设计来解决我的问题?如果能看到完整的代码来给你提供建议,那就太好了。但是我觉得依赖注入会阻止你使用singleton。。。只是一种感觉;-)顺便说一下,如果你想详细回答,这可能是一个完全不同的问题……我认为这可能是C++的工作,但不是java的(如果有人能遵守)。我在Java中尝试过这一点,它告诉我(非静态不能从静态上下文引用)。甚至认为x实际上是静态的!!这在Java中是可行的,试试看!你会看到的。。。顺便说一句,我建议不要使用单例,在使用前要三思而后行,你确定你需要静态的吗?这是一个错误。这个.x=x;不行。它必须是Foo.x=x;但如果您需要状态,您应该真正创建一个对象。Foo-Foo=new-Foo()有什么问题;foo.setX(1);我认为这可能在C++中工作,但是在java中(如果有人能遵守)。我在Java中尝试过这一点,它告诉我(非静态不能从静态上下文引用)。甚至认为x实际上是静态的!!这在Java中是可行的,试试看!你会看到的。。。顺便说一句,我建议不要使用单例,在使用前要三思而后行,你确定你需要静态的吗?这是一个错误。这个.x=x;不行。它必须是Foo.x=x;但如果您需要状态,您应该真正创建一个对象。Foo-Foo=new-Foo()有什么问题;foo.setX(1);