 |
 |
| 閲覧数: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の登録を行ってください。
|
|
|
|
 |
 |
|
 |
|
 |
 |