簡體   English   中英

在抽象方法中傳遞參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM