■環境
Android(Java)
■前提
HogeClass hoge = new HogeClass();
hoge.execute();
public class HogeClass extends AsyncTask<Object, Integer, List<Item>> {
@Override
protected List<Item> doInBackground(Object... params) {
・引数の「...」初めて見ました
・調べたら、可変長引数、と書いていました
■質問1
・「...右のparams」は、ユーザーが任意でつけて良い文字列でしょうか?
■質問2
・executeで引数指定していないので、doInBackgroundには引数は渡っていない、と考えて良いでしょうか?
■質問3
・executeで引数指定していないのにdoInBackgroundで可変長引数対応している理由は、このメソッド元である抽象メソッド「doInBackground (Params... params)」が可変長引数形式になっているためでしょうか?
http://developer.android.com/reference/android/o …
■質問4
・この場合の「AsyncTask<Object」は何をしているのでしょうか?
・可変長引数で、0個以上の引数を受け付ける際、その型がObjectであることを保障しているだけでしょうか?
・つまり、絶対にObject型の引数を渡すなら、この記述は省略しても良いのでしょうか?
■質問5
・ジェネリクスの使い所について
・型を絶対に保障したい時ってどんなときでしょうか?
・基本的にどんな時でも型は保障した方が良いと思うのですが、そうするとジェネリクスだらけにならない?
No.1ベストアンサー
- 回答日時:
Java 初心者ですが、面白いと思ったので色々調べてみました。
可変長引数は 1.5 以降の機能で、単に配列として受け取れるようです。
import java.util.Arrays;
public class Main {
public Main(Object... objects) {
System.out.println(Arrays.toString(objects));
}
public static void main(String[] args) {
new Main(1, 2, 3);
new Main(1, 2);
new Main(1);
new Main("a", "b", 1, 2);
}
}
を実行すると、
[1, 2, 3]
[1, 2]
[1]
[a, b, 1, 2]
となり、異なる型のオブジェクトが入っている、配列として、
扱われていることがわかります。
名前が関係ないこともわかります。
参照されている API を見ると、execute から呼ばれる
doInBackground の引数の型と、onProgressUpdate の引数の型、
onPostExecute の引数の型、とを指定して、継承せよ、
と読めるように思います。
無視して良い場合は、Void 型を指定せすれば良いようです。
質問の例では、doInBackground は Object 型の引数を取る、
onProgressUpdate は Integer 型の引数(アンボックスされて
int 型になる)を取る、onPostExecute は Item を内容に持つ List 型
を引数を取る、ことがわかります。
execute はそれらを踏まえた上で実行されるので、
params は使ってないのだと思います。Void としても同じでしょう。
ただ、オーバーライドする以上、可変長であることは明示しないと
ダメだと思います。
私がジェネリックを便利だと思ったのは、TreeSet を使った時です。
インターフェイス Comparable を持つクラスなら、ソートされた順で
取り出しができるので。compareTo で、そのクラスのためだけを
考えて、実装すれば良いので。null との比較の場合分けとかを
気にしなくて良いので便利です。
こんなかんじです。
import java.util.*;
public class Example implements Comparable<Example> {
private String contents;
public Example(String s) { this.setContents(s); }
public String getContents() { return this.contents; }
public void setContents(String s) { this.contents = s; }
public int compareTo(Example o) {
return this.getContents().compareTo(o.getContents());
}
public String toString() { return this.getContents(); }
public static void main(String[] args) {
Set t = new TreeSet<Example>();
t.add(new Example("c"));
t.add(new Example("a"));
t.add(new Example("b"));
System.out.println(t);
}
}
タイピングするのが面倒という人も多いようで、stackoverflow に
http://stackoverflow.com/questions/683533/type-a …
というのがありました。java generics type alias で検索した結果です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- その他(プログラミング・Web制作) pythonのmap、結果の利用は1度だけ? 5 2022/06/11 12:33
- 高校 対数方程式につきまして 4 2022/05/05 07:55
- C言語・C++・C# 3つの倍精度浮動小数点値の平均を求めて、3つの引数全てを平均値に変更するメソッドを作成し、キーボード 1 2022/07/13 16:04
- Excel(エクセル) 【エクセルマクロ】既に開いているIEの、サイズや表示位置を変更するには 4 2022/12/01 22:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[C#.net]スレッド化された別フ...
-
Javaでパラパラアニメを作成す...
-
大量のデータを読み込んで表示...
-
数独の問題作成
-
ボタンのイベントで異なるウィ...
-
【java】座標の値をテキストフ...
-
Thread.sleepのInterruptedExce...
-
Junitテストでvoid戻り値メッソ...
-
GetDIBits関数の使い方について
-
C#で、あるクラスのメンバーす...
-
javaアプレット repaintのタイ...
-
C# DataGridView列カスタマイズ
-
【javaアプレット】スクロール...
-
C# 半角カナの文字化けについて
-
ペイントソフトを作っているの...
-
二分探索木の要素の数を数える...
-
Processingでマウスクリックで...
-
struts2のchainで値の受け渡し...
-
C# タスク非表示でタイトルバー...
-
JWindow、JFrameでモーダル化の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
大量のデータを読み込んで表示...
-
ボタンの複数割り当てについて
-
C#で、あるクラスのメンバーす...
-
Junitテストでvoid戻り値メッソ...
-
C#でのWNetAddConnection3の使...
-
C# 矢印キーの取得
-
Thread.sleepのInterruptedExce...
-
unityでのC++エラーの原因がわ...
-
C#で別のFormへ複数の値を返そ...
-
C# visibleプロパティをfalseに...
-
エンターキーを押すとOKボタン...
-
Processingでマウスクリックで...
-
[C#.net]スレッド化された別フ...
-
C#でキーイベントが発生しない...
-
C# DataGridView列カスタマイズ
-
【C#】ソースコードをファイル...
-
LVM_SETITEMSTATEでListViewの...
-
GetDIBits関数の使い方について
-
未割り当てのローカル変数
-
C# MouseHoverを何度も呼ぶには
おすすめ情報