2016-06-13 14 views
1

さまざまなタイプのJava Beans(したがってList<JavaBean>)をファイルに書き込む一般的なメソッドを記述しようとしています。私は現在FileManagerユーティリティクラスを構築中です。各Java Beanは同じインタフェースを実装しています。ここに私がしようとしているものの例があります。Java:メソッドと同じインターフェイスを実装する別のカスタムオブジェクトを渡す

public interface Data { method declarations } 
public class RecipeData implements Data { class stuff goes here } 
public class DemographicData implements Data { class stuff goes here } 

final public class FileManager { 
    public static void writeToCsvFile(String filename, List<Data> data) { file writing logic goes here } 
} 

私はこの方法にList<RecipeData>List<DemographicData>を渡すことができるようにしたいです。明らかに私が持っているものは動作しません。

私も次の操作を行うことができていないようだ。

List<Data> data = new ArrayList<RecipeData>(); 

どのようにこれが正常に行われるのでしょうか?スウィフトでは、私はasを使うかもしれない?キーワードを使用して正しいタイプにキャストします。

************** ************** EDIT

ちょうど私がするのを支援するためにSuperCSVライブラリを使用してい序文します行をJava Beanに解析して、メソッド定義のために以下の受け入れられた答えを使用しています。私は次のエラーを取得する

Data dataset; 
while((dataset = beanReader.read(Data.class, nameMappings, processors)) != null) { 
    container.add(dataset); 
} 

The method add(capture#1-of ? extends Data) in the type List is not applicable for the arguments (Data)

データセットはこれが機能するために、私が想定したいタイプRecipeDataまたはDemographicDataのいずれかであることが必要。だから私は、次のコードを持っています将来的にBeanを追加すると柔軟になるようにこれを修正する簡単な方法はありますか?

+0

あなたが受け取ったエラーにはどのようなものがありますか? –

+0

'List <? Data> data = new ArrayList (); ' –

+0

私は受け取っているエラーで、下のポストを更新しました。私は受け入れられた回答メソッドの宣言を使用しています。 –

答えて

2
final public class FileManager { 
    public static void writeToCsvFile(String filename, List<? extends Data> data) { file writing logic goes here } 
} 

加えて、あなたは

List<Data> data = new ArrayList<Data>(); 

や、Javaの7で、

List<Data> data = new ArrayList<>(); 

とちょうどいずれかの方法以来、RecipeDataを移入よう

List<Data> data = new ArrayList<RecipeData>(); 

を宣言することができますあなたは情報thを失っているこのListのみを含めることですRecipeData

+0

これは私の方法を宣言したときにコンパイラエラー "データを型に解決できません"を返します。 –

+0

Well .. FileManagerクラスに 'Data'をインポートしましたか? –

+0

それは同じパッケージに入っているので、私はそれが問題ではないと思います。 public static void writeToCsvFile(String filename、List data) –

関連する問題