2015-06-25 93 views
0

當前正在執行一個typestate項目,我在導入List類時遇到了問題。當我嘗試編譯類時,它在命令行中引發錯誤,說找不到符號並指向List符號。我想知道你如何解決這個問題。它似乎適用於字符串和整數,但不適用於列表。找不到符號,java,classloader

java文件是通過另一個翻譯.scr文件的程序自動創建的。在SCR文件我用的是以下行:

type <java> "java.lang.List" from "rt.jar" as List; 

的Java文件:

package demos.Redis; 
    import java.io.BufferedReader; 
    import java.io.IOException; 
    import java.io.InputStreamReader; 
    import java.io.PrintWriter; 
    import java.net.Socket; 
    import java.net.ServerSocket; 
    import java.net.UnknownHostException; 

    public class ClientRole { 
     private BufferedReader socketServerIn = null; 
     private PrintWriter socketServerOut = null; 
    public ClientRole(){ 
     ServerSocket serverServer = null; 
     try { 
      serverServer = new ServerSocket(20000); 
     } 
     catch(IOException e) { 
      System.out.println("Unable to listen on ports"); 
      System.exit(+1); 
     } 
     Socket socketServer = null; 
     try { 
      System.out.println("Accepting..."); 
      socketServer = serverServer.accept(); 
      System.out.println("Server accepted"); 
     } 
     catch(IOException e) { 
      System.out.println("Accept failed"); 
      System.exit(+1); 
     } 
     try { 
      socketServerIn = new BufferedReader(new InputStreamReader(socketServer.getInputStream())); 
      socketServerOut = new PrintWriter(socketServer.getOutputStream(), true); 
     } 
     catch(IOException e) { 
      System.out.println("Read failed"); 
      System.exit(+1); 
     } 
    } 
    public void send_WATCHListToServer(List payload) { HERE IS WHERE IT BREAKS!! 
     this.socketServerOut.println(payload); 
    } 
    public Choice1 send_Choice1LabelToServer(String payload) { 
     this.socketServerOut.println(payload); 
     int intLabelChoice1 = Integer.parseInt(payload); 
     switch(intLabelChoice1){ 
      case 1: 
      return new Choice1(Choice1.GET); 
      case 2: 
      return new Choice1(Choice1.WATCH); 
      case 3: 
      default: 
      return new Choice1(Choice1.MULTI); 
     } 
    } 
    public void send_GETStringToServer(String payload) { 
     this.socketServerOut.println(payload); 
    } 
    public String receive_GET_respStringFromServer() { 
     String line = ""; 
     try { 
      line = this.socketServerIn.readLine(); 
     } 
     catch(IOException e) { 
      System.out.println("Input/Outpur error."); 
      System.exit(+1); 
     } 
     return line; 
    } 
    public void send_MULTIStringToServer(String payload) { 
     this.socketServerOut.println(payload); 
    } 
    public Choice2 send_Choice2LabelToServer(String payload) { 
     this.socketServerOut.println(payload); 
     int intLabelChoice2 = Integer.parseInt(payload); 
     switch(intLabelChoice2){ 
      case 1: 
      return new Choice2(Choice2.SET); 
      case 2: 
      return new Choice2(Choice2.DISCARD); 
      case 3: 
      default: 
      return new Choice2(Choice2.EXEC); 
     } 
    } 
    public void send_SETStringToServer(String payload) { 
     this.socketServerOut.println(payload); 
    } 
    public void send_DISCARDStringToServer(String payload) { 
     this.socketServerOut.println(payload); 
    } 
    public void send_EXECStringToServer(String payload) { 
     this.socketServerOut.println(payload); 
    } 
    public Choice3 receive_Choice3LabelFromServer() { 
     String stringLabelChoice3 = ""; 
     try { 
      stringLabelChoice3 = this.socketServerIn.readLine(); 
     } 
     catch(IOException e) { 
      System.out.println("Input/Outpur error, unable to get label"); 
      System.exit(+1); 
     } 
     int intLabelChoice3 = Integer.parseInt(stringLabelChoice3); 
     switch(intLabelChoice3){ 
      case 1: 
      return new Choice3(Choice3.EXEC_OK); 
      case 2: 
      default: 
      return new Choice3(Choice3.EXEC_FAIL); 
     } 
    } 
    public String receive_EXEC_okStringFromServer() { 
     String line = ""; 
     try { 
      line = this.socketServerIn.readLine(); 
     } 
     catch(IOException e) { 
      System.out.println("Input/Outpur error."); 
      System.exit(+1); 
     } 
     return line; 
    } 
    public String receive_EXEC_failStringFromServer() { 
     String line = ""; 
     try { 
      line = this.socketServerIn.readLine(); 
     } 
     catch(IOException e) { 
      System.out.println("Input/Outpur error."); 
      System.exit(+1); 
     } 
     return line; 
    } 
    } 

命令行

+5

'java.util.List'代替'的java.lang.List'可能取代你的線在.scr的文件,你的問題會消失? –

+0

啊,很聰明。我會給它一個bash。 – spaga

+0

從來沒有工作,但謝謝 – spaga

回答

1

ÿ我們的Java文件缺少java.util.List的導入語句,這就是爲什麼它無法編譯。

與String和Integer不同,List不在java.lang包中。您需要導入java.util.List,而不是java.lang.List。

如果我正確理解您的方案,您的其他程序正在生成導入語句並嘗試爲java.lang.List添加一個導入,但實際上並不存在導入語句。有趣的是,你的代碼中沒有import java.lang.List的聲明。我不知道這是否是您的其他程序或功能中的錯誤!但更有可能的,如果你有type <java> "java.util.List" from "rt.jar" as List;

+0

我認爲這應該工作,但事實並非如此。我認爲譯者計劃中存在一個錯誤(並且有數百個錯誤)。 – spaga

+1

這確實解決了這個問題。當我添加導入它只是改變了錯誤,但新的錯誤只是從方法很容易修復返回列表。並且只是意識到,製作代碼的人根本不需要使用List。謝謝大家。 – spaga

0

您正在使用的接口列表中,但是您沒有導入它,它說,它無法找到象徵java.lang.List,因爲它試圖尋找這個類在默認java.lang包,添加import java.util.List,你是不會有問題的