- 締切済み
ArrayListのキャスト
JavaのArrayListについて質問します。 Class A extends OyaA の関係があります。 ArrayList<A> arrayA と ArrayList<OyaA> arrayOyaA で arrayOyaA=(ArrayList<OyaA>)arrayA; arrayA=(ArrayList<A>) arrayOyaA; のCastを行いたいとおもいます。コンパイルエラーになってしまいます。 Castする方法はありますでしょうか。 なければ上手くデータ変換する方法を教えてください。 何卒宜しくお願い致します。
- ytommy007
- お礼率84% (21/25)
- Java
- 回答数4
- ありがとう数4
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- wormhole
- ベストアンサー率28% (1622/5658)
>arrayA=arrayOyaA;は同じコンパイルエラーが発生しました。 >arrayOyaA=arrayA;はエラーが発生しませんでした。 キャストする前提だと思ったんですけど(だからわざわざキャストまでは書かなかった)違ったんでしょうか?
- teketon
- ベストアンサー率65% (141/215)
Genericsの型チェックを行わないリストを使えばいいのでは? ArrayList<A> arrayA; ArrayList<OyaA> arrayOyaA; ArrayList noTypedList = new ArrayList(); noTypedList = arrayA; arrayOyaA = noTypedList; noTypedList = arrayOyaA; arrayA = noTypedList; ただ、このコードレビューを私が担当したら、やり直させます。
- wormhole
- ベストアンサー率28% (1622/5658)
OyaAとAのスーパークラス,サブクラスの関係にありますけど、 ArrayList<OyaA>とArrayList<A>はスーパークラス,サブクラスの関係にないので当然です。 やるとするなら ArrayList<A> arrayA と ArrayList<? extends OyaA> arrayOyaA
お礼
ご指摘の通り、ArrayList<OyaA>とArrayList<A>はスーパークラス,サブクラスの関係にないのは理解できます。 以下のようにしても、 ArrayList<A> arrayA と ArrayList<? extends OyaA> arrayOyaA arrayA=arrayOyaA;は同じコンパイルエラーが発生しました。 arrayOyaA=arrayA;はエラーが発生しませんでした。 ご教授ありがとうございます。
- Tacosan
- ベストアンサー率23% (3656/15482)
エラーメッセージは?
お礼
以下のようにアンマッチがコンパイルエラーにでます Type mismatch: cannot convert from ArrayList<SampleActivity.AOya> to ArrayList<SampleActivity.A>
関連するQ&A
- 総称型のキャストでエラー
下の書き方で、※1はエラーにならないのですが ※2ではエラーになります。 ※1がキャスト可能であれば、 ※2も可能だとおもうのですが。 Java7を使っています。 public class Soushou { void test() { List<Kodomo> kodomoList = new ArrayList<Kodomo>(); List<? extends Oya> oyaList = kodomoList; Object o1 = (List<Oya>) oyaList; // ※1 エラーにならない。 Object o2 = (List<Oya>) kodomoList; // ※2 「キャストすることができません」エラーになってしまう。 } } class Oya { // 親クラス } class Kodomo extends Oya { // 親クラスを継承した子クラス }
- ベストアンサー
- Java
- trim()メソッドの使用方法とキャストの仕方について
こんばんは、今回はtrim()メソッドの使用方法とキャストの方法についてお伺い致します。 trimメソッドを使用して文字列の前後の空白を削除したいのですが、 通常 String str = " 「こんにちは」"; str = str.trim(); とコーディングしコンパイルして表示するとちゃんと「こんにちは」となるのすですが、これが ArrayList list = new ArrayList(); BufferedReader br= new BufferedReader(new FileReader(Test.txt); while((str = br.readLine()) !=null){ str = str.trim(); list.add(str); } br.close(); とコーディングしコンパイルは通るのですが、 「こんにちは」のままで"「"の前にある空白が削除されてません。 私なりに「型」の違いでが原因ではないかと思い、java.io.ArrayList型からjava.lang.String型へキャストしようとしているのですが、コンパイルエラーが出てしまします。 プログラムコードは ArrayList list = new ArrayList(); String s; s = (String)list; としています。 エラー内容は ScheduleControlCall.java:142: 変換できない型 出現: java.util.ArrayList 要求: java.lang.String s = (String)list; ^ エラー 1 個 となっています。 度々ですが、ご指導お願い致します。
- ベストアンサー
- Java
- (ソースコード有)ArrayListについて
(ソースコード有)ArrayListに何でも入れられるのが問題と本に書いてあったのですがどういうことですか? package jp.rutles.sample; import java.util.ArrayList; public class MyJavaApp { static ArrayList data; public static void main(String[] args) { data = new ArrayList(); data.add(new MyObject("Hello")); data.add(new MyObject("Welcome")); data.add(new MyObject("Bye!")); addString("etc"); for(Object obj : data){ MyObject myobj = (MyObject)obj; System.out.println(myobj); } } public static void addString(String s){ data.add(s); } } 本ではこれを実行すると、 プログラム自体は問題がなくコンパイルして実行できるのですが、途中でエラーが発生して強制終了します。 その原因がaddStringというメソッドがdataフィールドにStringオブジェクトを保管するものだからだそうです。 mainメソッドではMyObjectを追加して中身をそのままforで出力しているだけですが、取り出したオブジェクトをMyObjectにキャストするところで、エラーになってしまうらしいです。(なんかこの文の文法が少し変な気はしますが本もこのようにかいていますw) addStringを呼び出すと、ArrayListにStringが追加されます。このStringを取り出してMyObjectにキャストしようとしたためにエラーになってしまった。らしいです。 まず 「mainメソッドではMyObjectを追加して中身をそのままforで出力しているだけですが、 取り出したオブジェクトをMyObjectにキャストするところで、エラーになってしまう。」 というのがよくわかりません。 そして 「addStringを呼び出すと、ArrayListにStringが追加されます。このStringを取り出してMyObjectにキャストしようとしたためにエラーになってしまった。」 これもよくわかりません。 ArrayListになんでも入れれることがなぜ問題なのかを知りたいので この本ではこのあとこれを上手に解決する方法として ジェネリックスというものを解説してくれているのですが これは使わないようにお願いします! すごく注文が多いのですが どなたか教えてくださいお願いします!
- ベストアンサー
- Java
- ArrayListに配列を入れることは出来ますか?
最近javaの勉強を始めました。 それで質問なのですが、ArrayListにString型の配列を入れれないでしょうか? また、Genericsはどうなるのでしょうか(取り出すときにキャストする方法でも)? よろしくお願いします。
- ベストアンサー
- Java
- ArrayListを改良したい
visual C# 2010 Express を使用しています。 ArrayListは動的に要素を追加できるの便利なのですが、 次のような使い方で要素を取り出そうとするとasキャストが必要になってしまいます・・・ class Data : Dictionary<string, string> { } class DataList : ArrayList { public void Add(Data value) { base.Add(value as Data); } } class Program { static void Main(string[] args) { var d = new Data(); d["a"] = "aa"; d["b"] = "bb"; DataList arr = new DataList(); arr.Add(d); // var dd = arr[0] as Data; var dd = arr[0]; Console.WriteLine(dd["a"]);// エラー 角かっこ [] 付きインデックスを 'object' 型の式に適用することはできません。 Console.ReadLine(); } } そこでというか、ラップした独自のクラスを作りたいと思い上のような感じで作成したのですが、 やはり同じエラーになってしまいます・・・ asキャストを必要とせず、そのままDataクラス(Dictionary<string, string>)を 取り出すためにはどのように作成したら良いのでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
- arraylistの呼び出し
A.classでB.classのarraylistを作成し Cクラスのオブジェクトを何個もarraylistに保存しているんですけど そのarraylistをbクラスで使いたいんですけど うまくいきません 例とエラー文を載せますので、教えてください 例 public class A{ int i=0; int b=0; public static void main(String[] args){ ArrayList<B> strs=new ArrayList<B>(0); for(b=0;b<30;b++){ B b =new B(); //ここは何回も作ってます strs.add(b,i); i++; } } public ArrayList get(){ return strs; } } class C { A a; static count=0; public void syutoku(SimpleTrajectoryViewer si){ this.a=a; } public void c(){ B b=new B(); ArrayList b =a.get(); B p=b.get(count); count ++; } } エラー文はクラスの ArrayList b =a.get();の部分で 互換性のない型 期待値 B 検出値 object と出ています 解決策教えてください 全てのプログラムを書いてるわけではありませんので おそらく関係のあるだろうってところを書きましたので わかりづらかったらすみません
- 締切済み
- Java
- ArrayList でスタックを
初歩的でツマラナイかもしれません。 import java.util.ArrayList; でスタックを実現するクラス"MyStack"を書きました。 フィールドは private ArrayList<Integer> stack = new ArrayList<Integer>(); のみという条件です。 MyStack.java - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - import java.util.ArrayList; public class MyStack { private ArrayList<Integer> stack = new ArrayList<Integer>(); // データを先頭に追加 public void push( int item ) { stack.add( item ); } // 先頭のデータを取り出す public int pop( ) { int rtn; if( stack.isEmpty() ) { System.out.println( "スタックは空です." ); System.exit( 1 ); } rtn = stack.get( 0 ); stack.remove( 0 ); return rtn; } } このMyStackを実行するクラス"MainForMyStack"を書きます。 実行結果は、標準出力に 43210 と出ることを想定しています。 MainForMyStack.java - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - import java.util.ArrayList; public class MainForMyStack { public static void main(String[] args) { MyStack stack = new MyStack(); // 0,1,2,3,4 をスタックに追加 for( int i=0; i < 5; i++ ) { stack.push( i ); } // スタックのデータを先頭から取り出す for( int i=0; i < stack.size(); i++ ) { System.out.print( stack.pop() ); } } } さて、MainForMyStack.java の i < stack.size(); の箇所でエラーが出るのはなぜでしょう? どなたかご教授の方お願いします。
- ベストアンサー
- Java
- ArrayListに格納したクラス内のメンバの呼び出し方法(VB)
お世話になります。VB2003でご質問があります。 通常Arryalistでは下記例1のように使用するのが一般的だと思うのですが、例2のようにArryaListにクラスを追加し、その中のメンバを呼び出すにはどのようにコーディングすればよいのでしょうか? コメントのコンパイルエラー箇所の部分です。 お手数ですが、ご教授よろしくお願いいたします。 ******************************************* (例1) Dim Test as new ArrayList Test.ADD("テスト") console.writeline(test(0)) ******************************************* ******************************************* (例2) Public Class A public strA as string public sub subTest() strA = "おはよう" end sub End Class Public Class B Dim a as new ArrayList a.Add(new A) a(0).subTest '--コンパイルエラー箇所 console.writeline(a(0).strA) '--コンパイルエラー箇所 End Class *******************************************
- ベストアンサー
- Visual Basic
- ArrayListへの格納について
お世話になります。 javaのArrayListについて質問ですが、とあるストリームデータがあり、それをArrayListに入れたいの ですが、区切り文字(\n)でaddできなくて困っております。ひとつのStringデータなどからaddするには どのように行えばいいのでしょうか。
- 締切済み
- Java
- 「型 ArrayList は総称ではありません・・・。」エラーについての問題です。
コンニチハ、javaの初心者s-unです。 Eclipse(Ver:3.1.1)でJavaのプログラムを書いています。 *********************************** import java.util.ArrayList; class collectionTest1{ public static void main(String args[]){ ArrayList<String> array = new ArrayList<String>(); } } *********************************** エラーメッセージは 「型 ArrayList は総称ではありません。引数 <String> でパラメーター化できません。」 JDK準拠>>コンパイラー準拠レベル5.0になっています。 原因をお教え頂けますと幸いです。 よろしくお願い申し上げます。
- ベストアンサー
- Java
お礼
ご教授していただいたコードは確かにコンパイルエラーが発生しませんでした。 コードレビューでやり直しにならない方法を、お手数掛けますが、ご教授していただければ幸いです。