2017-12-04 3 views
-1

実装するリストクラスを決定するために使用する文字列変数typeを使用するメソッドを記述しています。このメソッドは、switch文を使用して、変数名newListを使用して適切なタイプのリストを作成します。switchステートメント内にオブジェクトを作成する際に問題が発生しました。後のコードで「オブジェクトを解決できません」(java)

switch文は次のようになります。

switch (type) { 
    case "unsorted": { 
     UnsortedList newList = new UnsortedList(); 
     break; 
    } 
    case "sorted": { 
     SortedList newList = new SortedList(); 
     break; 
    } 
    case "new sorted": { 
     NewSortedList newList = new NewSortedList(); 
     break; 
    } 
    default: { 
     System.out.print("Something went wrong! List type unrecognized. I have initialized newList to be an unsorted list."); 
     UnsortedList newList = new UnsortedList(); 
    } 
} 

これによると、私はnewListは常に原因switch文のデフォルトの場合にインスタンス化されると信じています。しかし、私はコンパイルエラー "newListは解決できません"が表示されます。

これを防ぐためにできることはありますか?

+2

'newList'のスコープは個々の' {} 'ブロックです。それはどこにも見えません。 –

+3

スイッチ内でリストを作成するので、外からアクセスできません。範囲外です – azro

+0

どのように 'newList'を使用していますか?これらのクラスは共通のインターフェイスを共有していますか? – shmosel

答えて

0

newListが小さすぎる範囲に作成されています。 Javaのスコープは{}となります。変数は、作成のスコープと同じレベル以上のスコープにのみ存在します。例えば

:私はListと呼ばれるリストの種類のインタフェースを実装し、タイプとしてnewListをインスタンス化

List newlist; // make sure all of your various List types are compatible. 
switch (type){ 
    case "unsorted":  
    { 
     newList = new UnsortedList(); 
     break; 
    } 
    case "sorted":  
    { 
     newList = new SortedList(); 
     break; 
    } 
    case "new sorted": 
    { 
     newList = new NewSortedList(); 
     break; 
    } 

    default: 
    { 
     System.out.print("Something went wrong! List type unrecognized. I have initialized newList to be an unsorted list."); 
     newList = new UnsortedList(); 
    } 
} 
0

以前の両方のコメントが質問に答えました。範囲外のいくつかの異なるローカルnewListフィールドを作成します。

解決策は、スイッチの外にList newListを作成することです。ただし、リストで指定されたメソッドには制限があるので、ソートメソッドにアクセスすることはできません。

0

public class ScopeClass(){ //this is the start of the class level scope 
    private String classString = "this can been seen anywhere in the class"; 
    public void scopeMethod(){ //this starts the method level scope 
     private String methodString = "this is only visible in the method"; 
     { //start of internal scope block 
      private String internalString = "only visible in this scope block"; 
     } 
    } 
} 

switch範囲のあなたのnewList見える外を作るためには、これを試してくださいswitchステートメントの前にList。これにより、スイッチの外側でnewListが表示され、各リストタイプのプロパティが取得されました。

ここに私のコードの改訂版です。

List newList; 
    switch (type) 
    { 
     case "unsorted":  
     { 
      newList = new UnsortedList(); 
      break; 
     } 
     case "sorted":  
     { 
      newList = new SortedList(); 
      break; 
     } 
     case "new sorted": 
     { 
      newList = new NewSortedList(); 
      break; 
     } 
     default: 
     { 
      System.out.print("Something went wrong! I have initialized newList to be an unsorted list"); 
      newList = new UnsortedList(); 
     } 
    } 

はあなたの助けのために皆に感謝します。私はまだすべてのコメントが役立つように学んでいます!

+0

新しくなったので、あなたの質問に対する最良の答えに投票して受け入れてください。これにより、同様の質問があれば他の人が簡単に答えを見つけることができます。 –

関連する問題