Classオブジェクトが与えられたときにオブジェクトを作成することについて簡単に質問します。あるいは、私はこれについて別のことをする必要があります。最初に私の計画から、Fileオブジェクトの配列を取得し、それぞれをSetに読み込むメソッドを作成しています。そこで、各セットがリストに追加され、リストが返されます。以下は、私が持っているものです。Javaの指定されたClassオブジェクトからオブジェクトを作成する
private static List<Set<String>> loadFiles(File[] files, Class whatType, Charset charSet){
List<Set<String>> setList = new ArrayList<Set<String>>(files.length);
try {
for(File f : files){
BufferedInputStream bs = new BufferedInputStream(new FileInputStream(f));
InputStreamReader r = new InputStreamReader(bs, charSet);
BufferedReader br = new BufferedReader(r);
Set<String> set = new HashSet<>(); //This is the problem line
String line = null;
while((line = br.readLine()) != null){
set.add(line.trim());
}
br.close();
setList.add(set);
}
return setList;
} catch (FileNotFoundException e) {
//Just return the empty setlist
return setList;
} catch (IOException e) {
//return a new empty list
return new ArrayList<Set<String>>();
}
}
しかし、私が欲しいのはメソッドのユーザーは(限り、それは当然の文字列が含まれているとして)インスタンス化する設定の種類を指定できるようにすることです。これが 'whatType'パラメータのためのものです。
すべての私の研究は、クラス名が与えられたオブジェクトをどのようにインスタンス化するかを私に導きましたが、実際に私がここで行ったことではありません。
'HashSet'と' TreeSet'の違いは? –
なぜですか? Javaでは、このようなメソッドから独自の新しいセットを返すことが一般的に予想されます。 – chrylis
@chrylisこれの主な理由は、内部的に私が取り組んでいるプロジェクトはファイルからたくさんの読み込みを行い、それらの文字列をセットに格納することです:Hash、Tree、Setを実装する独自のクラス。使用されるセットのタイプは状況によって異なります。これにより、コードベースを簡素化し、キャストして定型文を少なく書くことができます。これは、基本となる実装が重要な場合に適しています。 – Hangman4358