Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 >  掲示板 >  掲示板(引数 ジェネリクス)
閲覧数:442
掲示板(引数 ジェネリクス)
名前
匿名
題名 引数 ジェネリクス
質問内容

質問を評価する
(0ポイント)
以下のようなメソッドを実装しました。
引数に文字列(区切り文字含む)と
setを指定すると、
そのsetに区切った文字を追加してくれるメソッドです。

convertToSet(string, new LinkedHashSet<String>())

現在、このように呼び出していますが、
newやコンストラクタを呼び出すことを省略できますか?
つまり、こんな感じで入力の手間を省く記述はありますか?

Set<String> set = convertToSet(string, LinkedHashSet<String>)

たかだか、newを省略するだけですが。。。



private Set<String> convertToSet(String string, Set<String> set){
        if(string == null) return null;
        String[] split = string.split(PARTITION, 0);
        
        for(String s : split){
            set.add(s);
        }
        
        
        
        
        return set;
        
    }
質問日時 2013-12-17 04:08:27
名前
匿名
回答内容

回答を評価する
(0ポイント)
Javaは何らかのnewを書かない限りインスタンスを生成する
ことはできない。一瞬書いていないように見えるコードも、
単に隠蔽されているか、リフレクションか、デシリアライズ
したものか、あるいはnativeで生成しているか、あたりだ。
回答日時 2013-12-17 08:01:49
名前
匿名
回答内容

回答を評価する
(0ポイント)
まあざくっとみ。

private <T> Set<T> 
 convertToSet(T...args){
 if(args == null) return null;
 Set<T> set = new HashSet<>();
 for(T s : args){
  set.add(s);
 }
 return set;
}

とかにすんあ・q・ メモリもったいない
回答日時 2013-12-17 12:00:58
名前
匿名
回答内容

回答を評価する
(0ポイント)
↑のメソッドはメモリもったいないのですか?
キモはSet<T> set = new HashSet<>()
のところを、LinkedHashSetとかに分岐させたいんですが。。。
回答日時 2013-12-17 21:19:33
名前
匿名
回答内容

回答を評価する
(0ポイント)
仕方ないな…。

private <T,U extends Set<T>> Set<T> 
convertToSet(Class<U> clazz, T... args)

中身は自分で考えてみな。
回答日時 2013-12-17 21:39:43
名前
匿名
回答内容

回答を評価する
(0ポイント)
すげぇ〜!!!!!!
できた!!!!!

ジェネリクスについて調べても
よく分からなかったんですけど、
望んだ結果が得られて理解が深まりました!

これでコードを整理できそうです。
回答日時 2013-12-18 08:59:51
名前
匿名
回答内容

回答を評価する
(0ポイント)
ちなみに、下記のコードだとエラーが出ます。

int[] array = new int[]{1,2,3};

Set<Integer> set = convert(new TreeSet<Integer>(), array);

Integer[] array = new Integer[]
に直せば大丈夫でしたが、
なぜjavaはラッパークラスで統一しないのですか?

パフォーマンスの問題ですか?
回答日時 2013-12-18 09:16:56
名前
匿名
回答内容

回答を評価する
(0ポイント)
[]はそれ自体が配列という特殊なオブジェクト。
ラッパーなのはその基本クラスであって配列自体ではないと
いう理屈なんだろう。
コンパイラが良きに計らってくれても良さそうな場面だが。

プリミティブを残しているのは、最初にそうしてしまった
から、なんだろうな。
10年以上前だし、今ほどVMもこなれてないしマシンスペック
だって相当低かったし、少しでも軽い方が良かったろう。
ただ、その選択を当時考えなかったとは思えないな。

パフォーマンスは今の一般的な環境なら微々たる差だろう。
実行時の最適化もあるし。
そんなことよりは、別の場所に注力する方が良い。
回答日時 2013-12-18 19:41:05
回答内容を入力し、「確認」ボタンをクリックしてください。
ログインしていません。ログインしなくても回答はできますが、ログインすると、質問・回答の管理、更新があった場合のメールでの通知を受けることができます。 ユーザIDをお持ちでない方は「ID登録」からユーザIDの登録を行ってください。
氏名 匿名
回答内容
 



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道