2012-04-19 9 views
-1

時には、私がそれを避けようとしている限り、私はかなりの量の定型コードをプログラミングで生成します。私は、Javaクラスオブジェクトが定型コードを回避するために使用できると言われていますが、現在どのように見えていません。定型コードでのJavaクラスオブジェクトの使用

ボイラープレートコードと言っても、少しずつ変更して、何度も何度も再利用されるテキストを指す言葉を指しています。今

public Map<String, Boolean> loadBooleanTags(File in) 
{ 
// Code that extracts boolean tags 
} 

、あなたはその後、ファイルがまったく同じ形式であるが、あなたは、データ構造がMap<String, Integer>になりたいint型のタグを、ロードしたい、とします。

public Map<String, Integer> loadIntegerTags(File in) 
{ 
// Code that extracts integer tags 
} 

は基本的に、私はコピーして、ブール方法過ぎて、私はそれが代わりに整数を解析します:私はこれを処理すると考えることができる唯一の方法はとても似ています。これを処理するより良い方法は何ですか?理想的には、適切なジェネリックの地図を出力する1つの方法があります。

+4

あなたはJavaでプログラムを実行しますが、あなたは "Java Class"でグーグルを見つけますか?それが私に何か不足していると仮定すると、あなたが扱っている問題を説明するためにいくつかのコードスニペットを投稿できますか? –

+4

"定型句のコード"を定義してください –

+2

なぜ[パフォーマンス]タグですか? –

答えて

3

興味深い質問です。例えば、あなたが専門分野を提供し必要なすべてのバリエーションについて

public abstract class GenericMapFactory<T> 
{ 
    public Map<String,T> makeMap(File in) throws InstantiationException, IllegalAccessException, IOException 
    { 
     Map<String,T> result = new HashMap<String,T>(); 
     BufferedReader rdr = new BufferedReader(new FileReader(in)); 
     String line = null; 
     while ((line=rdr.readLine()) != null) 
     { 
      String key = "" /* something meaningful for your application */; 
      T  item = parse(line); 
      result.put(key, item); 
     } 
     return result; 
    } 

    protected abstract T parse(String line); 
} 

、::

public static class IntMapFactory extends GenericMapFactory<Integer> 
{ 
    @Override 
    protected Integer parse(String line) 
    { 
     Integer result = null; 
     // parse the line, setting the value of result 
     return result; 
    } 
} 
まず、 Classは、Java 1.セカンド以来の周りされている、私は、これはあなたが探しているパターンだと思います

すべての「定型文」コードは汎用スーパークラスに分解され、型固有のコードのみを記述する必要があります。

File in = ... 
Map<String,Integer> msi = new IntMapFactory().makeMap(in); 
関連する問題