2012-04-05 2 views
2

私は、次の仕事にしようとしています:クラス定義内のワイルドカードをバインドしても機能しませんか?

import java.io.Serializable; 
public abstract class Thing implements Iterable<? extends Serializable> {} 

をしかし、私は、コンパイルし、次のエラーを取得:あいまいさがここにありますなぜ私はよく分からない

Thing.java:2: unexpected type 
found : ? extends java.io.Serializable 
required: class or interface without bounds 
public abstract class Thing extends Iterable<? extends Serializable> {} 

を?コンパイラは私が意図していることを知ってはいけませんか?可能であれば、この正確な機能を手に入れて、なぜこれが機能しないのか理解したいと思っています。

ありがとうございました!

+1

'Iterable'はインタフェースなので、' Serializable'です。 –

+0

良いキャッチ、同じエラーです。 –

+0

なぜこの機能が必要ですか?あなたのユースケースは何ですか? – Jeffrey

答えて

1

java.lang.Iterableクラス定義

Iterable<T> 

だから、常にgenricパラメータにT

を割り当てるために任意のクラスまたはインタフェースを期待しています。しかし、あなたは、結合型パラメータを渡しますエラーが発生しました。

+1

'Serializable'はインターフェースです。それを継承することはできません。 –

+0

@HunterMcMillenはい、あなたは正しいです、実際に私はいくつか不在の心でそれを書いた。今私はそれを修正しました。 –

+2

ジェネリッククラスを最後に 'FooBar <?'として定義しようとしたのはいつですか?タイプ> 'を拡張しますか? – Jeffrey

2

私はあなたの意図は、次のようなものを持っていると仮定します。

public class FooBar implements Iterable<? extends Serializable> { 
    public Iterator<? extends Serializable> iterator() { 
     return new Itr(); 
    } 
} 

しかし、これは一般的なパラメータはちょうどSerializableも持つと機能的に同等です。 Iterator<? extends Serializable>nextメソッドを呼び出すと、Serializableが返されます。

関連する問題