2016-12-12 7 views
0

私はアンドロイドサンプルを探していて、わからないコードで場所を見つけました。ここで(hereから取られた)コード だ:より具体的なパラメータタイプでオーバーライドするのがアンドロイドで許可されるのはなぜですか?

public class RosterFragment extends BrowseFragment 
    implements OnItemViewClickedListener { 

    // code 

    @Override 
    public void onItemClicked(Presenter.ViewHolder viewHolder, 
          Object o, 
          RowPresenter.ViewHolder rowViewHolder, 
          Row row) { 
    ((LeanbackActivity)getActivity()).showPreso((PresoContents)o); 
    } 

    // code 

} 

私はJD-GUIでOnItemViewClickedListenerクラスを逆コンパイルしました、以下のように、それが宣言され

package android.support.v17.leanback.widget; 

public abstract interface BaseOnItemViewClickedListener<T> 
{ 
    public abstract void onItemClicked(Presenter.ViewHolder paramViewHolder, Object paramObject, RowPresenter.ViewHolder paramViewHolder1, T paramT); 
} 

Javadocは、クラス定義に関する同じと言います。

最終的なパラメータは、宣言インターフェイスにタイプTがあることに注意してください。jlsに準拠したタイプObjectが必要です。しかし、コードが正常にコンパイルされると、パラメータinstedでObjectのオーバーライドが許可されます。私は同じ構造自分自身を記述しようとしたこの2つのクラスました:いくつかのエラーにリードをコンパイルする

interface A<T>{ 
    public void dodo(Integer a, Object b, Float c, T t); 
} 

class B implements A{ 
    @Override 
    public void dodo(Integer a, Object b, Float c, String t) { 
    } 
} 

試み:B is not abstract and does not override abstract method dodo(Integer,Object,Float,Object) in Amethod does not override or implement a method from a supertype

質問です:RosterFragmentコードコンパイル可能にするものを?

+2

クラスはOnItemViewClickedListenerを実装しています。 BaseOnItemViewClickedListenerを逆コンパイルしました。なぜ、クラスのjavadocを読み込んで(そして指し示す)だけではないのですか?それが何も持っていない場合は、とにかくそのクラスを使用すべきではありません。 –

+0

これは、あなたが逆コンパイルしたものが難読化されているからでしょうか?クラス名は一文字になります – Sheychan

+0

私はjavadocが実際のクラスと違うと思ってクラスを逆コンパイルしました。それは問題を説明します。しかし、その場合はjavadocについては大丈夫です。そして、どのクラスも難読化されていない –

答えて

3

そのわかりやすいOnItemViewClickedListenerBaseOnItemViewClickedListener<Row>を実装しており、一般的なものはBaseOnItemViewClickedListener<T>ではありません。

定義コードはhereです。

Doc形式では、そのhereです。

最後のパラメータのTが明らかにに解決されました。

希望すると助かります!

関連する問題