2010-12-20 10 views
1
@Override 
public Class< ? extends Page> getHomePage() { 
      return HomePage.class; 
} 


public Class<HomePage> getHomePage(){ 
     return HomePage.class; 
} 

最初のものには、 オーバーライドがあります。それはどういう意味ですか、あるいは フレームワークに何を送りますか?「@Override」と「<?extends Page>」とはどういう意味ですか?

両方のメソッドが同じクラスを返しますか?つまり、? extends Pageとは何ですか?私は?マーク。

答えて

1

1)Override Annotation

Javadocは:メソッド宣言がスーパークラスのメソッド宣言をオーバーライドすることを意図していることを示します。メソッドがこの注釈型で注釈されていても、スーパークラスメソッドをオーバーライドしない場合、コンパイラはエラーメッセージを生成する必要があります。

2)?いずれかを意味する。たとえば:<? >ここにあるJavaデータ型を意味します

<? extends Page>は、ここでPageのサブクラスが許可されていることを意味します。

2

@Override -

@Override注釈は、(オーバーライドメソッドは、レッスンがインタフェース」というタイトルで説明する要素は、スーパークラスで宣言された要素を上書きすることを意味するコンパイラに通知および継承」)。 a wildcard

また

+1

これを少し拡張すると、実際にはスーパークラスやインタフェース内のメソッドをオーバーライドしていない(または実装していない)ことを示すIDEのうんざりしたエラーが表示されます。これは、例えば、あなた自身のgetHomePage()メソッドが実行されないと思われるように、エラーメッセージを出さないメソッド 'getHomPage()'を書く、タイプミスなど)に役立ちます。 – fwielstra

+0

@Cthulhu IDEはこの情報をコンパイラのみから取得し、これは '@ Override'の真の使用法です。 –

2

そして、2つ目の質問に参照してください。

どちらの方法では、同じオブジェクト(HomePageを表すClassインスタンス)を返しますが、それらは異なる方法で宣言されている、あなたが持っているPageの種類を気にしない方法で使用されるワイルドカーディングバージョンを許可しますそれはPageのサブクラスです。

関連する問題