簡體   English   中英

不返回void的Java虛擬方法

[英]java virtual method that does not return void

我希望派生類中的方法重寫CONCRETE基類中的虛擬方法並返回如下內容(即不為空):

public class HelloWorldApp
{
    public static void main(String args[])
    {
        Bar bar = new Bar();
        bar.go();
    } 
}

public class Foo
{
    public void go()
    {
        System.out.print(this.test().toString());
    }

    protected Integer test()
    {
        return 1;
    }
}

public class Bar extends Foo
{
    @Override
    protected Integer test()
    {
        return 2;
    }
}

沒有多余的“返回1”,有沒有辦法做到這一點? 在Foo.test()中將永遠不會運行。 顯然它可以正常工作,但似乎我做錯了什么嚴重的事情。

該問題是問題被更新以聲明基類必須是具體的之前創建的。


如果您希望Footest方法永遠不會運行,請通過使Foo類成為abstracttestabstract實施它。

public abstract class Foo {

    public void go() {
        System.out.print(this.test().toString());    
    }

    abstract protected Integer test();
}

如果由於某種原因(示例中因為Foo擴展了一個具體的類)而沒有使Foo.test()抽象,並且您確定它永遠不會被調用,則拋出運行時異常可能是可取的。沒有合理的默認值:

protected Integer test()
{
    throw new UnsupportedOperationException("Calling test on Foo is not supported");
}

Java核心API中有一些示例,例如,參見UnsupportedOperationException-盡管此含義略有不同,但它用於某些集合類型的某些實現實現而某些不實現的可選方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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