javaのLinkedListとArrayKistについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ほうみん

javaのLinkedListとArrayKistについて

#1

投稿記事 by ほうみん » 12年前

JAVAについて質問です。
今、新しくJAVAについて学習しているのですが、ArrayList,LinkedList等についてよくわからないことが出てきたので質問させてください。

ここではArrayListを使用していますがまず

コード:

import java.util.ArrayList;

public class test{
        public static void main(String args[]){
        ArrayList<String> tt=new ArrayList<String>();
        String test=" test ";
        tt.add(test);
        System.out.println(tt.get(0).trim());

        }
}
とすると
The type ArrayList is not generic; it cannot be parameterized with arguments <String>および
Syntax error, parameterized types are only available if source level is 5.0
と出てコンパイルができません。
試しに

コード:

import java.util.ArrayList;

public class test{
        public static void main(String args[]){
        ArrayList tt=new ArrayList();
        String test=" test ";
        tt.add(test);
        System.out.println(tt.get(0).trim());

        }
}
としてみると上にあげたエラーは出なくなりますが、今度は
The method trim() is undefined for the type Object
と出てコンパイルできないのです。
配列中のオブジェクトの関数はget()では使えないのですか?

YuO
記事: 947
登録日時: 15年前
住所: 東京都世田谷区

Re: javaのLinkedListとArrayKistについて

#2

投稿記事 by YuO » 12年前

ほうみん さんが書きました:The type ArrayList is not generic; it cannot be parameterized with arguments <String>および
Syntax error, parameterized types are only available if source level is 5.0
と出てコンパイルができません。
javacの-sourceオプションで1.4とかを指定していませんか。
GenericsがJavaに導入されたのはJavaSE 1.5 (Java 5)なので,それ以前のバージョンを指定した場合,コンパイルできません。
ほうみん さんが書きました:としてみると上にあげたエラーは出なくなりますが、今度は
The method trim() is undefined for the type Object
と出てコンパイルできないのです。
ジェネリック型として宣言していないコレクションは,単純にjava.lang.Objectのコレクションとして扱われます。
# JavaのGenericsは実際には「コンパイル時のキャストの追加」と「コンパイル時の型のチェック」なわけですが。
java.lang.Objectにtrimメソッドはないですから,当然エラーになります。
java.lang.String#trimを使いたいのであれば,java.lang.Stringにキャストする必要があります。

ほうみん

Re: javaのLinkedListとArrayKistについて

#3

投稿記事 by ほうみん » 12年前

YuOさん
アドバイスありがとうございます。
Object型からString型へキャストすることによりtrim()を使うことはできました。

コード:

import java.util.ArrayList;

public class test{
        public static void main(String args[]){
        ArrayList tt=new ArrayList();
        String test=" test ";
        tt.add(test);
        String a;
        a=(String)tt.get(0);
        System.out.println(a);
        System.out.println(a.trim());

        }
}
しかし

コード:

import java.util.ArrayList;

public class test{
        public static void main(String args[]){
        ArrayList<String> tt=new ArrayList<String>();
        String test=" test ";
        tt.add(test);
        String a;
        a=(String)tt.get(0);
        System.out.println(a);
        System.out.println(a.trim());

        }
}         
とすると
コンパイル時にはオプションを
javac -source 1.5 test.java
としてみると
Syntax error, parameterized types are only available if source level is 5.0
のエラーは消えたのですが
The type ArrayList is not generic; it cannot be parameterized with arguments <String>
のエラーは残ってしまいました。
こちらも何か所見があればよろしくお願いします

ほうみん

解決しました!

#4

投稿記事 by ほうみん » 12年前

Linuxで書いていたのですが、windowsにして最新版のJavaをインストールしたところ上記の記法でコンパイルできるようになりました。
(Linuxの方はパーミッションの問題でインストールできないので…)
ご協力ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る