首页 > 解决方案 > 使用没有扩展同一个父类的类的方法

问题描述

我正在使用处理,并且我有一个方法( here),当我在窗口中绘制时以及在图像中绘制时smooth(),我想将其用于对象。PAppletPGraphics

问题是,这两个类(PApplet& PGraphics)仅从Object该类扩展,Eclipse 说我必须在强制转换PApplet或强制转换之间进行选择,PGraphics但在这种情况下我想同时使用两者。

我该如何解决?

标签: javaeclipseprocessing

解决方案


没有一种神奇的方法可以支持两种完全不同的类型。不过有几个解决方法。

您可以使用重载,这意味着为每种类型创建单独的函数。像这样的东西:

void drawRect(PGraphics pg){
  pg.rect(1, 2, 3, 4);
}

void drawRect(PApplet p){
  p.rect(1, 2, 3, 4);
}

或者您可以依赖于PApplet类具有引用其内部实例的g变量这一事实。然后,当您有实例时,您PGraphics只需要一个接受PGraphics并传入变量的函数。像这样的东西:gPApplet

void setup(){
 size(500, 500); 
}

void draw(){
 drawCircle(g); 
}

void drawCircle(PGraphics pg){
  pg.ellipse(mouseX, mouseY, 20, 20);
}

这种方法有点老套,所以更好的解决方案是重构你的PApplet代码,让它总是PGraphics显式地绘制。然后你可以将该PGraphics实例传递给你的函数。


推荐阅读