[英]how to access main class objects in other classes without a constructor in a processing/java eclipse project?
我似乎无法在任何地方的互联网上找到答案。
所以我在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
方法。
您可以在Main
添加一个getter方法,但首先请阅读-> 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中的Object
, Boolean
是。
编辑在您发表评论后,我确实了解您的需求。
您需要创建一个interface
并将此接口传递给Interaction
构造函数。
该界面应提供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
}
}
}
通过这些更改,如果ctx
是Main
, PApplet
或Unicorn
,则Interaction
可能会不太PApplet
。 它的构造函数请求预期的行为,而Main
的实现在运行时提供了此行为。
无论如何,请阅读javaworld文章和相关文章。 另外,请阅读有关Dependency Injection
文章
小程序基本上是应用程序的顶级容器,它为用户交互GUI /显示和输入(鼠标单击,键盘)提供了上下文。
在设计良好的应用程序中,您的业务逻辑应封装在一个或多个类中,并且您将基于外部输入在此方法上进行调用,然后可能会查询它的信息以输出到GUI。 这非常笼统。
顶级容器(在本例中为Applet)只应与实例化业务对象,捕获用户输入,在业务对象上调用方法,然后根据业务对象的状态更新GUI有关。
我猜想您会被迫将所有交互代码包装到一个类中,以使业务逻辑清晰明了。 在这种情况下,应该封装业务逻辑,而不是通过Applet类进行传播。 这将使您可以轻松地将业务对象转移到桌面应用程序,甚至完全不使用GUI即可运行它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.