2016-09-02 4 views
-1

型付きのオブジェクトから型付きのオブジェクトにコードをリファクタリングしたいと考えています。リスト内のオブジェクトの型に基づいてメソッドの戻り値の型を変更する

たとえば、ここに私の現在のコードは次のとおりです。

public class TestClass { 

    ArrayList list = new ArrayList(); 

    public ArrayList testMethodA() { 
     list.add("string1"); 
     list.add("string2"); 
     list.add("string3"); 
     list.add("string4"); 
     list.add("string5"); 
     return list; 
    } 
} 

私はそれが

public class TestClass { 

    List<String> list = new ArrayList<>(); 

    public ArrayList<String> testMethodA() { 
     list.add("string1"); 
     list.add("string2"); 
     list.add("string3"); 
     list.add("string4"); 
     list.add("string5"); 
     return list; 
    } 
} 

になるように、型指定されたリストの中に、これを有効にすることから、戻り値の型を変更する方法はありますArrayList~ArrayList<Object>のタイプに基づいて、obj1,obj2、...]?たとえば、リストに追加される内容がStringの場合は、ArrayListからArrayList<String>への戻り値を動的に変更できますか?

私はEclipseを使用していますので、これを行うのに役立つプラグイン(またはスクリプトなど)があれば、それは非常に感謝しています。

これを行う「自動」な方法がない場合は、5-6日の手動による修正が必要になります。これはむしろ回避します。

+0

3つの事:http://help.eclipse.org/kepler/index.jsp?topic=/org.eclipse.jdt.doc.user/reference/ref-menu-refactor.htm

はまた、この前のstackoverflowの質問を参照してください。 1常に*のインタフェースを記述します。 *常にジェネリック*を使用してください。 3.他のメソッドから直接アクセスできる場合は、 'list'を返す必要はありません。 – TheLostMind

+0

ありがとうございます。私のケースでは、各クラスを調べて、何が追加されているかを確認して手動で変更することで戻り値の型を変更する必要がある巨大なコードベースを持っています。私はこのことを手動でやりたくないので、利用可能な***プラグインを使用しようとしています***または以下のタスクを達成するスクリプトを書いてください。 – Srikar

+0

@Srikar実際にはあなたの質問では言いませんが、タイプされていないオブジェクトから型付きオブジェクトにコードをリファクタリングしていますか?あなたが望むようなコードを持っていて、実行時にタイプされていない型を変更したいという質問から、 – Chewtoy

答えて

0

私は、これは正確に何をしたいです疑うが、あなたはジェネリックでそれを行うことができます。

public static List<T> testMethodA(T... objs) { 
    return Arrays.stream(objs).collect(Collectors.toList()); 
} 

あなただけのタイプによって決定される、単一のリストでいずれかのタイプを持っていることができるようになりますオブジェクトが渡されますが、具体的クラスは、このリストを含むようにしたい場合は、あなたが試すことができます。

public class TestClass<T> { 
    List<T> list = new ArrayList<>(); 

    public List<T> testMethodA(T... obj) 
    ... 
} 

あなたががオブジェクトのインスタンスを作成した後、あなたはタイプを変更することはできません。ただし、各インスタンスは異なるタイプを持つことができます。

+0

私はコードベースを持っていますが、私はそれを変更することはできません。残念ながら、彼らはメソッドを汎用化していません。 – Srikar

+0

私の問題をより明確に理解するために、私が@Chewtoyに投稿したコメントを参照してください。 – Srikar

+0

その場合、どのような前提ができますか。リスト内のすべてのオブジェクトが同じタイプであることを保証していますか?リストに含めることができるタイプは何か。それはいくつかの種類の有限集合、または不明ですか? – Kelvin

0

はい、ジェネリックを使用できます。 Javaのエディタで

public <T> List<T> someGenericListMethod(T[] objs){ 

    List<T> lObj = new ArrayList<T>(); 
    for(int i=0; i<objs.length;++i) 
     lObj.add(objs[i]); 

    return lObj; 
} 
+0

@Chewoyに書いたコメントを参照してください。問題。 – Srikar

+0

リストをList として宣言すると、その中にどのタイプも格納することができます。それでは、適切なキャストを行うための呼び出しメソッドまでです。 –

関連する問題