Java:无法理解如何从其他 class 调用实例
Java: Trouble understanding how to call instance from other class
我一直在试图弄清楚如何从一个 class 的实例调用一个方法,而这个实例又是一个不同的 class。例如:
public class Test1
{
public static void makeSomeInst()
{
Test1 inst = new Test1();
inst.fireTest();
}
public void fireTest()
{
System.out.println("fireTest");
}
public Test1()
{
}
}
理解上面的内容没有问题,但是如果我想从一个名为 Test2 的 class 中对 inst 做些什么,我该怎么做呢?以下示例不起作用:
public class Test2
{
public static void main(String[] args)
{
Test1.makeSomeInst();
inst.fireTest();
}
}
为了更加清楚,我知道我可以在不实例化的情况下调用静态引用,但我只想知道,在这种特定情况下
从 Test2 class 引用名为 inst 的 test1 对象的语法是什么?
您必须将您的实例保存在某处。
如果 Test1 应该是单例,你可以这样做:
public class Test1
{
private static Test1 instance;
public static Test1 getInstance()
{
return instance == null ? instance = new Test1() : instance;
}
public static void main(String[] args)
{
Test1 inst = getInstance();
inst.fireTest();
}
public void fireTest()
{
System.out.println("fireTest");
}
}
在测试 2 中:
public class Test2
{
public static void main(String[] args)
{
Test1.getInstance().fireTest();
}
}
//编辑
正如我刚刚从@Thomas S. 评论中了解到的那样,单例不是一个好的解决方案。
请参阅@candied_orange 的回答以获得更好的实施。
what If I want to do something to inst from a class called Test2, how would I do that?
首先你必须教 Test2
class Test1
是什么。
public class Test2
{
public doSomething()
{
inst.fireTest();
}
public Test2(Test1 inst)
{
this.inst = inst;
}
private Test1 inst;
}
然后教 inst2
对象 inst
是什么。
public class Test1
{
public static void main(String[] args)
{
Test1 inst = new Test1();
Test2 inst2 = new Test2(inst); // <- new code
inst2.doSomething(); // <- new code
}
public void fireTest()
{
System.out.println("fireTest");
}
public Test1()
{
}
}
你只需要一个主播就可以开始表演。控制流仍然可以通过其他对象。但在这一点上我不会称这些独立测试。我只是用那个名字来匹配你的代码。
您正在查看的是一种叫做引用传递的东西。它的花哨术语是 Pure Dependency Injection*。基本模式是在 main 中构建一个对象图。构建完成后,对一个对象调用一种方法以启动整个过程。
在 main 中,您构建的每个对象都将与您的程序一样长寿。您不会在这里找到构建的是后来生成的对象,例如时间戳。一个好的经验法则是在进行任何实际工作之前构建这些长期存在的对象中的每一个。因为他们彼此了解,所以他们可以在他们之间来回传递控制流。那里有很多力量,如果使用不当,它会变得混乱。查看 Architectural Patterns 以帮助保持简单。
这里遵循的原则是separate use from construction。遵循这一点,您可以轻松地改变对在一个地方谈论什么的想法。如果设计更改不会迫使您重写所有内容,那就太好了。
我一直在试图弄清楚如何从一个 class 的实例调用一个方法,而这个实例又是一个不同的 class。例如:
public class Test1
{
public static void makeSomeInst()
{
Test1 inst = new Test1();
inst.fireTest();
}
public void fireTest()
{
System.out.println("fireTest");
}
public Test1()
{
}
}
理解上面的内容没有问题,但是如果我想从一个名为 Test2 的 class 中对 inst 做些什么,我该怎么做呢?以下示例不起作用:
public class Test2
{
public static void main(String[] args)
{
Test1.makeSomeInst();
inst.fireTest();
}
}
为了更加清楚,我知道我可以在不实例化的情况下调用静态引用,但我只想知道,在这种特定情况下
从 Test2 class 引用名为 inst 的 test1 对象的语法是什么?
您必须将您的实例保存在某处。 如果 Test1 应该是单例,你可以这样做:
public class Test1
{
private static Test1 instance;
public static Test1 getInstance()
{
return instance == null ? instance = new Test1() : instance;
}
public static void main(String[] args)
{
Test1 inst = getInstance();
inst.fireTest();
}
public void fireTest()
{
System.out.println("fireTest");
}
}
在测试 2 中:
public class Test2
{
public static void main(String[] args)
{
Test1.getInstance().fireTest();
}
}
//编辑
正如我刚刚从@Thomas S. 评论中了解到的那样,单例不是一个好的解决方案。 请参阅@candied_orange 的回答以获得更好的实施。
what If I want to do something to inst from a class called Test2, how would I do that?
首先你必须教 Test2
class Test1
是什么。
public class Test2
{
public doSomething()
{
inst.fireTest();
}
public Test2(Test1 inst)
{
this.inst = inst;
}
private Test1 inst;
}
然后教 inst2
对象 inst
是什么。
public class Test1
{
public static void main(String[] args)
{
Test1 inst = new Test1();
Test2 inst2 = new Test2(inst); // <- new code
inst2.doSomething(); // <- new code
}
public void fireTest()
{
System.out.println("fireTest");
}
public Test1()
{
}
}
你只需要一个主播就可以开始表演。控制流仍然可以通过其他对象。但在这一点上我不会称这些独立测试。我只是用那个名字来匹配你的代码。
您正在查看的是一种叫做引用传递的东西。它的花哨术语是 Pure Dependency Injection*。基本模式是在 main 中构建一个对象图。构建完成后,对一个对象调用一种方法以启动整个过程。
在 main 中,您构建的每个对象都将与您的程序一样长寿。您不会在这里找到构建的是后来生成的对象,例如时间戳。一个好的经验法则是在进行任何实际工作之前构建这些长期存在的对象中的每一个。因为他们彼此了解,所以他们可以在他们之间来回传递控制流。那里有很多力量,如果使用不当,它会变得混乱。查看 Architectural Patterns 以帮助保持简单。
这里遵循的原则是separate use from construction。遵循这一点,您可以轻松地改变对在一个地方谈论什么的想法。如果设计更改不会迫使您重写所有内容,那就太好了。