2016-04-06 20 views
-3

私はjavaをコーディングすることを学んでいます。私は物事の仕組みを理解するのに役立ついくつかの問題に遭遇しました。メインクラスから他のクラスにオブジェクトを渡すにはどうすればいいですか

メインクラスの "myList"という名前の "Images"を含むリストを作成しました。

public class Main{ 

public static void main(String[] args) { 
    List<Images> myList = new ArrayList<Images>(); 
    ... 

この「システム」クラスでアクセスしたいと思います。しかし、それは私をさせてくれないようです。 指定されたリスト(list.get(2))の位置(この例では3番目)にアクセスする予定です。 "work"というメソッドを作成しました。

//Example  
public class System{ 
public static boolean work(List<Images> list){ 
    if(list.get(2).equals(Something)) 
     return false; 
    else ... return true; 
} 

私は、メインクラス(myList)で作成したリストを与える "work"メソッドを使用しようとしています。

public class System{ 
... 
if(work(myList)) //Don't know how to reffer to myList 
return something; 

「myListを変数に解決できません」というエラーが表示されます。 問題は、私がメインに作ったリストに "myList"という名前を付ける方法です。

あまりにもうまく説明されているのかどうかわかりませんが、何か提案はありますか?

+0

「メイン」と「システム」はどう関係していますか?一方はもう一方の方法を呼びますか?どうやって? –

+0

ある時点で、メインの内側から 'System'を導入しなければならないので、' work(myList) 'を呼び出すことができます。 'System'のどこかでそのリストを使いたいなら、' System'にインスタンス変数としてローカルに保存する必要があります。問題は 'myList'は' Main'クラスにカプセル化されているため、(あなたの場合は) 'package protected'としてスコープされています。あなたはそれを公開することができますが、それは非常に悪い習慣です。 – jr593

+0

'java.lang'パッケージ(' System')の名前と同じ名前のクラスがあるのはなぜですか? – bcsb1001

答えて

3

が一覧にSystemクラスのプロパティを確認し、その後、コンストラクタ

public class System { 
    private List<Images> images; 

    public System(List<Images> images) { 
     this.images = images; 
    } 

    //your other methods 
} 

ああでそれを渡しますあなたのメインでは、リストを渡す必要があります:

System system = new System(myList); 
0

別のオプションのはmyList のpublic staticと、このようなアクセスにそれを作るために:

Main.myList 
0

De clare one helperクラスを開き、setterとgettersであなたのリストを宣言してください。 Mainatinはこのクラスのシングルトンオブジェクトであり、そのリストを別のクラスで使用します。

0

あなたはアクセス可能であることを確認する必要があります。

現在、リストのスコープはmain()です。起動するのは静的です。

アクセス可能にする必要があります。静的変数に格納し、静的関数がそれを返すことで、これを行うことができます。 また、メインオブジェクトを他のオブジェクトに渡してアクセスできるようにします。

public class Main { 
    private List<Images> myList = new ArrayList<Images>(); 

    public static void main(String[] args) { 
     new Main(args); 
    } 

    public Main(String[] args) { 
     myList.add('foo.png'); 
     myList.add('bar.png'); 
     System mySystem = new System(this); 
    } 

    public List<Images> getImages() { 
     return myList(); 
    } 

} 

public class System{ 
    Main global; 
    public System(Main main) { 
     global = main; 
    } 
    public void doSomething() { 
     Iterator<Images> it = global.getImages().iterator(); 
     while(it.hasNext()) { 
      Images images = it.next(); 
     } 
    } 
} 
関連する問題