私はアンドロイドサンプルを探していて、わからないコードで場所を見つけました。ここで(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 A
とmethod does not override or implement a method from a supertype
質問です:RosterFragment
コードコンパイル可能にするものを?
クラスはOnItemViewClickedListenerを実装しています。 BaseOnItemViewClickedListenerを逆コンパイルしました。なぜ、クラスのjavadocを読み込んで(そして指し示す)だけではないのですか?それが何も持っていない場合は、とにかくそのクラスを使用すべきではありません。 –
これは、あなたが逆コンパイルしたものが難読化されているからでしょうか?クラス名は一文字になります – Sheychan
私はjavadocが実際のクラスと違うと思ってクラスを逆コンパイルしました。それは問題を説明します。しかし、その場合はjavadocについては大丈夫です。そして、どのクラスも難読化されていない –