List中的get(int)不能应用于java.lang.String

时间:2016-07-22 14:21:57

标签: java

我创建了一个这样的地图:

private Vector vaildateTestScore(String persTestCode, String score, List<TSpecialTest> specialTestList, Vector errorVtr) {

        Map<String, TSpecialTest> specialTestmap = new HashMap<String, TSpecialTest>();

        for (TSpecialTest specialTest : specialTestList) {
            specialTestmap.put(persTestCode,specialTest);
        }

        if (specialTestList.get(persTestCode).getPersTestScrQyMin() < score){

            errorVtr.add(specialTestList.get(persTestCode)+" max range is "+" "+specialTestList.get(persTestCode).getPersTestScrQyMax());

            System.out.println("There was an error with > "+specialTestList.get(persTestCode).getPerTestTypeCd());
        }
        else if(specialTestList.get(persTestCode).getPersTestScrQyMax() > score){

            errorVtr.add(specialTestList.get(persTestCode).getPerTestTypeCd()+" min range is "+" "+specialTestList.get(persTestCode).getPersTestScrQyMin());

            System.out.println("There was an error with < "+specialTestList.get(persTestCode).getPerTestTypeCd());
        }

        return errorVtr;
    }

但是,无论您在何处看到persTestCode,我的IDE都会显示运行时错误:get(int) in List cannot be applied to java.lang.String

通过在类的开头调用以下内容来设置此类:

   SpecialTestImpl specialTest = ComponentBuilder.getInstance().getApplicationContext().getBean(SpecialTestImpl.class);

     List<TSpecialTest> specialTestList = specialTest.specialTestList();

然后调用方法如下:

String persTestCode = elem.replace("scr.", "");
                                String score = request.getParameter(elem);
    Vector errorVtr = new Vector();

    //validates inputted test scores
    vaildateTestScore(persTestCode, score, specialTestList,errorVtr);

--------------------解决-------------------------- ------

这对我来说是一个狡猾的问题。选项卡按钮和名称相似性得到了我最好的。这就是我想要做的。

 private Vector vaildateTestScore(String persTestCode, String score, List<TSpecialTest> specialTestList, Vector errorVtr) {

        Map<String, TSpecialTest> specialTestmap = new HashMap<String, TSpecialTest>();

        for (TSpecialTest specialTest : specialTestList) {
            specialTestmap.put(persTestCode,specialTest);
        }

        if (specialTestmap.get(persTestCode).getPersTestScrQyMax() > Integer.parseInt(score)){

            errorVtr.add(specialTestmap.get(persTestCode)+" max range is "+" "+specialTestmap.get(persTestCode).getPersTestScrQyMax());

            System.out.println("There was an error with > "+specialTestmap.get(persTestCode).getPerTestTypeCd());
        }
        else if(specialTestmap.get(persTestCode).getPersTestScrQyMax() > Integer.parseInt(score)){

            errorVtr.add(specialTestmap.get(persTestCode).getPerTestTypeCd()+" min range is "+" "+specialTestmap.get(persTestCode).getPersTestScrQyMin());

            System.out.println("There was an error with < "+specialTestmap.get(persTestCode).getPerTestTypeCd());
        }

        return errorVtr;
    }

6 个答案:

答案 0 :(得分:1)

Java List get()方法将整数作为列表的索引,并返回该索引处的对象。您可能会将此与您在方法开头添加的地图数据结构混淆。

答案 1 :(得分:1)

列表只提供get(int index)的方法,你不能使用get(instanceName)获取名为instanceName的实例。 补充: 你使用map #put(key,value)的方式是不正确的。我认为你应该仔细阅读java#api。

答案 2 :(得分:1)

这对myside来说完全过分了。由于specialTestListspecialTestmap的名称相同,我让IDE上的标签按钮让我感觉最好。

private Vector vaildateTestScore(String persTestCode, String score, List<TSpecialTest> specialTestList, Vector errorVtr) {

        Map<String, TSpecialTest> specialTestmap = new HashMap<String, TSpecialTest>();

        for (TSpecialTest specialTest : specialTestList) {
            specialTestmap.put(persTestCode,specialTest);
        }

        if (specialTestmap.get(persTestCode).getPersTestScrQyMax() > Integer.parseInt(score)){

            errorVtr.add(specialTestmap.get(persTestCode)+" max range is "+" "+specialTestmap.get(persTestCode).getPersTestScrQyMax());

            System.out.println("There was an error with > "+specialTestmap.get(persTestCode).getPerTestTypeCd());
        }
        else if(specialTestmap.get(persTestCode).getPersTestScrQyMax() > Integer.parseInt(score)){

            errorVtr.add(specialTestmap.get(persTestCode).getPerTestTypeCd()+" min range is "+" "+specialTestmap.get(persTestCode).getPersTestScrQyMin());

            System.out.println("There was an error with < "+specialTestmap.get(persTestCode).getPerTestTypeCd());
        }

        return errorVtr;
    }

答案 3 :(得分:0)

specialTestList.get(persTestCode)正试图传递List#get(int)传递 String ,因此当然会失败。

也许您打算使用地图specialTestmap代替;它将采用get(String)方法,因为您创建的地图由String键入。

另请注意

if (specialTestList.get(persTestCode).getPersTestScrQyMin() < score){

...将我怀疑的intgetPersTestScrQyMin()的结果)与字符串 score进行比较。

这个循环非常可疑:

for (TSpecialTest specialTest : specialTestList) {
    specialTestmap.put(persTestCode,specialTest);
}

您反复使用相同的键值persTestCode。后续的put将覆盖之前的put,因此循环没有任何意义。

答案 4 :(得分:0)

问题似乎很清楚。

使用List<TSPecialTest>,您可以使用的唯一get功能是:

  • List#get(int)

但您尝试使用get作为参数调用方法String

您的目标当然是从String所附的列表中获取值,而不是使用List

答案 5 :(得分:0)

List.get()方法需要一个整数索引,您传递一个String值。

 if (specialTestList.get(persTestCode).getPersTestScrQyMin() < score){

https://docs.oracle.com/javase/7/docs/api/java/util/List.html#get(int)

您可能希望从地图中获取一个对象,如下所示:

 if (specialTestmap.get(persTestCode).getPersTestScrQyMin() < score){