[英]Passing Parameters In Abstract Method
我在 Java 中有一個抽象的 class ,該方法稱為
public abstract void onImageRendered(BufferedImage render)
我希望用戶使用此方法訪問渲染圖像。 我有另一種方法叫做
public void render()
渲染圖像。 抽象方法中的緩沖圖像不應是任何圖像,而是該方法的渲染圖像。
如何將該方法中的渲染圖像作為抽象方法的參數傳遞?
這是我的代碼:
public static void render(Scene scene) throws MORISIllegalMethodCallException{
if(propertiesAreSet){
Camera activeCamera = scene.getActiveCamera();
for (int x = 0; x < activeCamera.getWidth(); x++) {
for (int y = 0; y < activeCamera.getHeight(); y++) {
Ray ray = Ray.shootAt(activeCamera.getOrigin(), new Vector(x - activeCamera.getWidth()/2.0, activeCamera.getHeight()/2.0 - y, -(activeCamera.getHeight()/2.0)/Math.tan(activeCamera.getFov() * 0.5)).mul(activeCamera.getDirection()).normalize());
for (Renderable object : scene.getSceneObjects()) {
if (object.intersects(ray)){
//Assign colors to buffered image object "this.image" and do other necessary things
}
}
}
}
}else {
throw new MORISIllegalMethodCallException("The method moris.renderer.MORISRT.setProperties(int, double) should be executed before invoking the method moris.renderer.MORISRT.render(moris.scene.Scene)");
}
}
abstract void onImageRendered(BufferedImage renderedImage);//Here, the BufferedImage object should be "this.image"
渲染的圖像是這樣的:
我嘗試在 StackOverflow 上搜索類似的問題,還檢查了其他一些來源,但它們似乎沒有幫助。
任何建議,將不勝感激。
提前致謝。
abstract void onImageRendered(BufferedImage renderedImage);//Here, the BufferedImage object should be "this.image"
首先要說的是您正在嘗試將實現細節添加到抽象方法中。 這是錯誤的定義。 如果是抽象方法實現則委托給子類。 但這只是意味着您可以在每個子類中自由使用this.image
。 你可以做的是,在你的抽象 class 中,有一個......
protected BufferedImage image;
...您可以從每個子類中引用this.image
。
但是您必須更改方法render()
的簽名。 如果你想引用this
,它不能是static
。 static
方法只能訪問static
屬性,並且this
始終引用實例屬性。
更新
可以調用抽象class中的抽象方法:
public abstract class MyAbstractClass {
private BufferedImage image;
public void render() {
// ...
onImageRendered(this.image);
// ...
}
public abstract void onImageRendered(BufferedImage renderedImage);
}
public class MyConcreteClass extends MyAbstractClass {
@Override
public abstract void onImageRendered(BufferedImage renderedImage) {
// do stuff with renderedImage, which will always be the image
// in the rendered metho called on the parent class
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.