題名どおりなのですが、まず以下のようなソースを
書きました。

import java.util.*;

class Rab{
private String name;
private int number;

public Rab(){
name= "";
number=0;
}

public void setName(String name){
this.name=name;
}

public void setNumber(int number){
this.number=number;
}

public String getName(){
return name;
}

public int getNumber(){
return number;
}

}

public class Rabexc{
public static void main(String[] args){
Rab[] rab=new Rab[5];
for(int i=0; i<5; i++){
rab[i]=new Rab();
}
rab[0].setName("Owner");
rab[1].setName("Adminstrator");
rab[0].setNumber(1);
rab[1].setNumber(2);
ArrayList al=new ArrayList();
al.add(rab[0]);
al.add(rab[1]);
for(int i=0; i<al.size(); i++){
rab[i]=(Rab)al.get(i);
System.out.println("name: "+rab[i].getName()+"number: "+rab[i].getNumber());
}
}
}

これを実行してみたところ、
Rabexc.java:41: 警告:[unchecked] raw 型 java.util.ArrayList のメンバとしての add
(E) への無検査呼び出しです。
al.add(rab[0]);
^
Rabexc.java:42: 警告:[unchecked] raw 型 java.util.ArrayList のメンバとしての add
(E) への無検査呼び出しです。
al.add(rab[1]);
^
警告 2 個

という警告が出てコンパイルできません。

サイト・参考書なども調べて考えていたのですが、いまいち問題の解決法が浮かばないため、詳しい方いましたら教えていただけると幸いです。
宜しくお願い致します。

A 回答 (1件)

JDKは、Java 5.0以降(1.5以降)をお使いですね?


JavaSEでは、5.0以降、総称型というのが用意されています。コレクション・フレームワーク関係(要するにArrayListのようにどんなオブジェクトでも入れておけるものです)を使用する場合には、この総称型を使って保管するクラスの種類を特定しておけるようになっています。

ArrayList al=new ArrayList();

ArrayList<Rab> al = new ArrayList<Rab>();

このようにしてみてください。
詳細は、「総称型」または「Generic」で調べてみるとよいでしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q変数?配列?の値の代入[ ]と{}?

こんにちは,よろしくお願いします。
JavaScriptで次のような変数の代入と思われる式の意味を教えてください。

 var testValue = {};
 var hsValue = [];

いろいろ探してみましたがはっきりしたことがわかりません。すみませんがよろしくお願いします。

Aベストアンサー

>代入を表すということでよろしいのでしょうか?

文法上そうなんですがどちらかというと宣言文だと考えれば
いいんじゃないですか?

>var testValue = {};
var testValue = new Object();

>var hsValue = [];
var hsValue = new Array();

Qjavascript:(function(q, a, z) { q[a]("f")[z] = Ma

javascript:(function(q, a, z) { q[a]("f")[z] = Math.floor(Math.random()*999999);document.forms[0].submit(); })(document, "getElementById" ,"value");

このブックマークレットをsetIntervalで動かしたいのですがどう書き換えればいいのかよくわかりません。

調べたらstartfncやsetInterval(ここに何かを指定?,ミリ秒);を付ければ可能なことがわかったのですがうまくいきません。
初心者です。何卒宜しくお願いします

Aベストアンサー

こんにちは

>setIntervalで動かしたいのですが~~
setIntervalは以下のような構文になります。
 intervalID = window.setInterval(func, delay);
https://developer.mozilla.org/ja/docs/Web/API/Window/setInterval

ご提示のスクリプトは即時関数の形式をとっていますので、さらに関数化(匿名関数でも可)して上記構文のfuncに当てはめれば良いことになります。
http://qiita.com/katsukii/items/cfe9fd968ba0db603b1e
スクリプトは概ね以下の2行と等価ですので、こちらを関数化しても同じですね。
(フォームに乱数を設定しサブミットする)
 document.getElementById("f")..value = Math.floor(Math.random()*999999);
 document.forms[0].submit();


ところで、ご提示のスクリプトではフォームをサブミットするようになっていますが、通常はサブミットするとページが遷移してしまうので、setIntervalで繰り返すことは難しいはずです。
まぁ、target属性が設定されていたりすれば別ですけれど・・・
使い方がいまいちよくわかりませんが、文法的には
 setInterval( function(){
  ~~~
}, dalay);
とするか、
 setInterval(hoge, dalay);
 function hoge(){
  ~~~
 }
のようにすることで、実行が可能なはずです。(繰り返しできる環境であれば・・・)

こんにちは

>setIntervalで動かしたいのですが~~
setIntervalは以下のような構文になります。
 intervalID = window.setInterval(func, delay);
https://developer.mozilla.org/ja/docs/Web/API/Window/setInterval

ご提示のスクリプトは即時関数の形式をとっていますので、さらに関数化(匿名関数でも可)して上記構文のfuncに当てはめれば良いことになります。
http://qiita.com/katsukii/items/cfe9fd968ba0db603b1e
スクリプトは概ね以下の2行と等価ですので、こちらを関数化しても同じですね。
(フォ...続きを読む

Qclass Test_A {  main(){}}の実行順序は?

public class Test_A {
public static void main(){

int a = 0;
int b = 1;

}
}
例えば上のようなサンプルで何故 main()がクラスTest_A の中に挟まっているのでしょうか?実行順序としては main()が終了したら、クラスTest_A の方はどうなるのでしょうか? main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。よろしくお願いします。 

Aベストアンサー

>main()がクラスTest_A の中に挟まっているのでしょうか

Javaは、全てのプロパティ、メソッドはどこかのクラスに属していないといけないからです。
mainメソッドであっても例外ではありません。

>main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。

これを考える上で最も重要なのはmainメソッドがstaticであることです。
staticなメソッドは、そのクラスのインスタンスを作らなくても、
つまり、new Test_A();としなくても実行することが可能です。
プログラム実行時には、Test_Aクラスのインスタンスは生成されません。
質問のコードでは変数a,bに値が代入され、それで終わりです。

Javaでは、(正確にはJavaVMは)実行するclassファイルにある、
String[]引数を持ったvoid mainメソッドを実行する仕様になっています。
しかし、mainメソッドを実行するときには何のインスタンスも生成されていないので、
何かのインスタンスのメソッドを実行することはできません。
なので、staticなメソッドでないとJavaVMが実行できないのです。
さらに、JavaVMからアクセス可能なスコープを与える必要があるので、
publicである必要もあるのです。

あとは、そのmainメソッドに指定されたコードを実行し、mainメソッドの最後まで処理が進んだら
そこでJavaVMが終了し、プログラムも終了します。

※細かい話ですが、main()からプログラムは始まりません。
正確に言うと、引数なしのmain()メソッドは他のメソッドと何ら代わりがありません。
プログラムを始めるには、
アクセススコープがpublicで、staticな戻り値のなく、引数にString配列を取るmainメソッド
であることが必要です。つまり、
public static void main(String[] args)
とするのが通常です。
試しに質問のコードをjavaコマンドで実行すると、NoClassDefFoundErrorが出るはずです。

>main()がクラスTest_A の中に挟まっているのでしょうか

Javaは、全てのプロパティ、メソッドはどこかのクラスに属していないといけないからです。
mainメソッドであっても例外ではありません。

>main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。

これを考える上で最も重要なのはmainメソッドがstaticであることです。
staticなメソッドは、そのクラスのインスタンスを作らなくても、
つまり、new Test_A();としなくても実行することが可能です。
プログラム実行時...続きを読む

Q"try{}catch(){}"文で"close()"はどのように書けばよいのでしょうか。

こんにちは、片岡と言います。

プログラム1は、Java言語で学ぶデザインパターン入門(結城浩さん著)の
433ページを参考にして書きました。

私は、プログラム1のclose()の書き方よりもプログラム2のようなclose()の書き方が、
良いと思っています。
なぜならば、プログラム1では、out.writeObject(memento)行の例外によって、
close()が実行されないからです。

私のこの考え方は正しいのでしょうか。
もっと良いclose()の書き方はあるのでしょうか。
ご存知の方はいらっしゃいませんか。

●プログラム1
public class Main {
public static void saveMemento(Memento memento) {
try {
ObjectOutput out = new ObjectOutputStream(new FileOutputStream("game.dat"));
out.writeObject(memento);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
… //以下略
}

public class Memento implements Serializable {
… //以下略
}


●プログラム2
public class Main {
public static void saveMemento(Memento memento) {
try {
ObjectOutput out = new ObjectOutputStream(new FileOutputStream("game.dat"));
out.writeObject(memento);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
… //以下略
}

public class Memento implements Serializable {
… //以下略
}


なお、私の環境は以下の通りです。
OS: Microsoft Windows XP Professional SP2
開発環境:Eclipse 3.2.2
java: java version "1.4.2_13"

こんにちは、片岡と言います。

プログラム1は、Java言語で学ぶデザインパターン入門(結城浩さん著)の
433ページを参考にして書きました。

私は、プログラム1のclose()の書き方よりもプログラム2のようなclose()の書き方が、
良いと思っています。
なぜならば、プログラム1では、out.writeObject(memento)行の例外によって、
close()が実行されないからです。

私のこの考え方は正しいのでしょうか。
もっと良いclose()の書き方はあるのでしょうか。
ご存知の方はいらっしゃいませんか。

●プロ...続きを読む

Aベストアンサー

>私のこの考え方は正しいのでしょうか。
正しいです。質問者さんが書かれているやり方が一般的です。
念のため書いておきますが、outをtryの外で宣言しないとコンパイルが通りません。

まぁ、あくまでデザインパターンを学ぶための本ですから、細かなコーディングについて気にする必要はないでしょう(疑問を持つことは良いことですが)。

Qname = cats[1] という input 文の処理について( "["の文字について )

<form name="write">
<input type="checkbox" value="1" name="cats[1]" id="cat" /><label for="CAT">A</label><br />
という HTML におて、javascript での処理として(1)ならば動作するのですが(2)でも動作するようにしたいのですが、まったく困り果てています。ご教示くださいませ。
(1)document.write.cats1.checked = true;
(2)document.write.cats[1].checked = true;
<補足>
元ファイルでは name = に入る文字列自体を配列風味に扱っているようです。この"[]"がjavascript においてはまさに配列とみなされてしまう結果なのでしょうか?

よろしくお願いします。

Aベストアンサー

document.forms["write"].elements["cats[1]"].checked = true;


人気Q&Aランキング

おすすめ情報