2015-06-25 59 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,你是不会有问题的