java - 如何在处理/java eclipse 项目中访问其他类中没有构造函数的主类对象?

标签 java dependency-injection

我似乎无法在任何地方的互联网上找到答案。

所以我在Eclipse中有一个处理项目

我希望能够访问在另一个类中扩展 PApplet 的“主”类中的对象,而不必通过构造函数传递它们。我不是最有经验的程序员,所以我的术语可能不适用,但希望这个例子能阐明我正在尝试做的事情。

所以对于


public class Main Extends PApplet{

    //Example Class to access objects from main
    Interaction interaction;   

    //Example Objects I want
    boolean someObject;

    void setup(){        
        someObject = true;
        Interaction = new Interaction();  
    }

    void draw(){
    }   
}

public class Interaction{

    PApplet p;

    public Interaction(PApplet parent){
        p = parent;
    }

    public void mousePressed(){
        if(someObject){
            //do something
        }   
    }
}  

所以我知道我可以将该对象传递给 Interaction 的构造函数,例如

PApplet p;
boolean o;

public Interaction (PApplet parent, boolean SomeObject){
    p = parent;
    o = someObject;
}

但是在这样的示例中,这有点疯狂,我只想将我所有的鼠标和键盘交互保存在它自己的类中,因为它变得越来越大,但我一次又一次地遇到了这种需要,并且似乎无法弄清楚。

最佳答案

您所描述的称为 getter 方法。

您可以将 getter 方法添加到您的 Main,但请先阅读此 -> http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html

这是例子。

public class Main Extends PApplet {

    ...

    public boolean getSomeObject ( )
    {
        return someObject;
    }
}

public class Interaction {

   PApplet p;

   public Interaction(PApplet parent){
      p = parent;
   }

   public void mousePressed() {

       if( p.getSomeObject( ) ) {
           //do something
       }

   }
}

顺便说一句,boolean 不是 Java 中的 ObjectBoolean 是。

编辑 在你发表评论后,我明白你需要什么。

您需要创建一个接口(interface)并将此接口(interface)传递给Interaction构造函数。

此接口(interface)应提供您的Interaction 所需的所有方法。如果它需要访问 PApplet,那么这就是您的界面应该提供的。

考虑到这一点,这是一个新的层次结构:

public interface IInteractionContext
{
  boolean getSomeObject( );
}

public class Main
  extends PApplet
  implements IInteractionContext
{
  @Override
  public boolean getSomeObject ( )
  {
    return someObject;
  }

  ...
}

public class Main Extends PApplet {

    ...

    public boolean getSomeObject ( )
    {
        return someObject;
    }
}

public class Interaction {

   final IInteractionContext ctx;

   public Interaction(IInteractionContext ctx)
   {
      this.ctx = ctx;
   }

   public void mousePressed() {

       if( ctx.getSomeObject( ) )
       {
           //do something
       }

   }
}

有了这些变化,Interaction 就不会关心 ctxMainPApplet 还是 Unicorn 。它的构造函数请求预期的行为,而您的 Main 实现在运行时提供此行为。

无论如何请阅读 javaworld 文章和相关文章。 另外,阅读有关 Dependency Injection

的文章

关于java - 如何在处理/java eclipse 项目中访问其他类中没有构造函数的主类对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4026884/

相关文章:

java - AspectJ + @Configurable

java - 如何使用 Dagger 2 将服务注入(inject) JavaFX Controller

c# - 如何将 Ninject 和 MVC 与单个接口(interface)的多个实现一起使用?

JAVA - 修改员工

java - 我在 2 个不同的 hazelcast 成员中有相同的实体(例如 : "mapOfA, mapOfB"). 我想从一个成员同步更新此对象。这可能吗?

java - 限制 MySQL 请求

java - https 服务器上的请求方法

java - Spring、Hibernate基于不同数据库的类型映射

c# - 使用 MVC 6 在 Web API 中找不到 IServiceCollection

c# - DI、IoC 的五个 W,因为它让我的大脑爆炸