比方说,我有一个名为Object的类和一个名为ObjectCreator的线程来管理对象的创建。为了简单起见,Object具有属性:objectNumber和objectName。通过引用线程传递对象
如果我要创建Object实例,它将由ObjectCreator保存。现在让我们说我需要另一个线程(让我们称之为ObjectChanger)来查看和操纵实例;将实例变成静态对象是否有意义?
我已经设法通过使例如静态的,所以现在我可以这样做,看看结果:
ObjectCreator.instance.getName();
其中的getName()为对象的一个方法。从我从类似问题的答案中读到的东西,静态的东西是邪恶的,总是有解决方法。我读过的一个建议是将实例作为其构造函数的参数传递给ObjectChanger,但是如果实例在创建ObjectChanger时尚未创建,该怎么办?
也许这个问题更多的是关于面向对象的概念,而不是多线程,或者它可能是重复的,所以原谅我,但我很迷茫。
编辑:为了解决弗兰基和吉姆的建议,这里有一些代码段:
对象:
类对象
{
private String objectName = "Something";
private int objectNumber = 1;
public synchronized void changeNumber(int newNumber)
{
objectNumber = newNumber;
}
}
ObjectCreator:
class ObjectCreator extends Thread
{
static Object instance;
public ObjectCreator (Object something)
{
instance = something;
}
static void createObject()
{
...
}
static Object getObject()
{
return instance;
}
}
ObjectChanger:
public class ObjectChanger extends Thread
{
private Object currentInstance = null;
private int instanceNumber = null;
public void run()
{
currentInstance = ObjectCreator.getObject(); //If I were to make getObject() non-static, this line churns up an error
instanceNumber = currentInstance.getObjectNumber();
currentInstance.changeNumber(2); //valid?
}
}
为什么要创建一个名为'Object'的类? Object类已经在Java中定义,并且是所有其他类的超类。 –
对不起,我完全忘了这一点。我没有真正创建一个名为Object的类。我只在这个问题中将它命名为Object,认为它会更容易遵循。 – ScoopsaHaagenDazs
你似乎对'static'的含义感到困惑。您需要以现有代码的形式提供更多的上下文,并解释您的最终目标。很难弄清楚你想在这里做什么。 –