2012-01-17 14 views
0

配列と文字列参照の両方をとることができる1つの汎用メソッドを書く必要があります。このようなメソッドの中では、引数に応じて、インデックスを作成するだけでなく、同等性をチェックする必要があります。配列の場合、インデックスはもちろん[] operatorですが、Stringの場合はcharAt()メソッドです。また、私は引数を反復したいので、配列の場合はlengthフィールドを使用し、Stringの場合はlength()メソッドを使用します。平等のために、私は配列のequals()メソッドと文字列の文字の==を使用する必要があります。配列と文字列のjavaジェネリック

2つの別々のオーバーロードされたメソッドを書く方が良いでしょうか、それを一般的な方法にする努力をする価値があります。

後者の場合、これを行う方法は?

+0

この方法では、正確に何を達成しようとしていますか? – legendofawesomeness

+0

過負荷;あなたはさまざまなタイプを取っています。 –

答えて

0

問題の説明から、ほとんどの場合、2つのオーバーロードされたメソッドを作成する方がよいでしょう。

何かがあれば、それを1つにまとめることで何が得られるのかは不明です。しかし、これを行うには、多少の労力がかかり、その結果はかなり複雑になるでしょう。

さらに、配列とStringの両方をとることができる1つの方法は、引数としてObjectを取る必要があります。 Objectを受け入れると、人々はあなたのメソッドをロットで処理する方法を知らせることができます。コンパイル時の失敗の代わりに、結合されたメソッドは実行時に失敗する必要があります。

0

char[] -sとString -sについて同じことを達成しようとしているようです。ジェネリックメソッド(javaではオペレータのオーバーロードが不足しているためimo)を書く価値はありませんが、char[]String(またはその逆)に簡単に変換してから、同じコードを実行してください。

+0

は必ずしもchar []ではなく、 'equals()'がオーバーライドされたいくつかの素晴らしいオブジェクト 'myObjs []'を使用します。 :) –

+0

この場合、間違いなく異なる方法。 (オーバーロードの不足のため)、文字列リテラル型と "その他"型で同じことをしたときの状況を想像することはできません。 – zeller

1

javaの配列はオブジェクトなので、1つのObjectを受け取り、 "instanceof"関数を使ってテストするメソッドを書くことができます。

public class MethodTest { 

public static void main(String[] args) { 
    String[] tst = new String[]{"SOME","TEXT"}; 
    doSomething(tst); 
    doSomething("TEST"); 
} 

public static void doSomething(Object o) { 
    if(o instanceof String) { 
     System.out.println((String) o); 
    } else if(o instanceof String[]) { 
     String something[] = (String[]) o; 
     for(String s : something) { 
      System.out.println(s); 
     } 
    } 
} 

} 

しかし、私は2つの方法が最善の方法になると思う...

+0

配列の+1はオブジェクトです – zeller

0

過負荷方法。それを一般的な方法で解決しようとする努力は無駄であり、読めない可能性が非常に高いです。

+0

これはJavaジェネリックで解決できますか?笑 –