我似乎无法在互联网上找到答案。
所以我在Eclipse中有一个处理项目
我希望能够访问我的“main”类中的对象,该类在另一个类中扩展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;
}
但是在这样的例子中有点疯狂,我只是想在自己的类中保持我的所有鼠标和键盘交互,因为它变得越来越大,但我已经遇到了这个时间和时间的需要。似乎无法弄明白。
答案 0 :(得分:2)
您所描述的内容称为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
}
}
}
BTW,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
}
}
}
如果Interaction
为ctx
,Main
或PApplet
,那么Unicorn
可能会更少关注这些变化。它的构造函数请求预期的行为,Main
的实现在运行时提供了这种行为。
无论如何阅读javaworld文章和相关文章。
另外,阅读有关Dependency Injection
答案 1 :(得分:1)
applet基本上是应用程序的顶级容器,为用户交互GUI /显示和输入(鼠标点击,键盘)提供上下文。
在设计良好的应用程序中,您的业务逻辑应该封装在一个或多个类中,您可以根据外部输入调用此方法,然后查询它以获取输出到GUI的信息。这非常概括BTW。
顶级容器(在本例中为Applet)应该只关注实例化业务对象,捕获用户输入,调用业务对象上的方法,然后根据业务对象的状态更新GUI。
我猜你有必要将所有交互代码包装到一个类中,以便为业务逻辑保持清晰。如果是这种情况,则应该封装业务逻辑,而不是通过Applet类传播。这样您就可以轻松地将业务对象转移到桌面应用程序,甚至可以在没有GUI的情况下运行它。