Маловероятный тип аргумента String для содержит (объект) в коллекции - PullRequest
0 голосов
/ 29 декабря 2018

Я получаю предупреждение. Невероятный аргумент типа String для содержит (объект) в коллекции в затмении.Есть ли способ изменить код, чтобы не получать предупреждение?

 String[] findNames = {"shares","ticker","avgCost",
                      "mktPrice","gnLs","totVal"};    


   // get the name of every public instance variable 
   ArrayList<String[]> publicNames = new ArrayList<String[]>();        
   for(Field publicField : publicFields) {
       String[] name = new String[2];
       name[0] = publicField.getName();
       name[1] = publicField.getType().toString();
       publicNames.add(name);           
   } 

for (int i = 0; i < 6; i++){           
       if(publicNames.contains(findNames[i])){
           System.out.println("\n***** Warning: instance variable " + 
                              findNames[i] + " declared as \"public\" +
                              "*****\n ");               
       }           
}

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Вы пытаетесь сравнить String с String array, если вы хотите найти значение String, содержащееся в списке массива String, List<String[]>

Это можно сделать с помощью java-8.streams

publicNames.stream().flatMap(Arrays::stream).anyMatch(item->item.equals(findNames[i])) 

вернет истину, если любой из String[] в publicNames содержит findNames[i], или вернет ложь

0 голосов
/ 29 декабря 2018

Это потому, что publicNames является ArrayList из string[], и вы пытаетесь увидеть, содержит ли он одну строку, что неприменимо.

Теперь я не знаю, почему вы храните кортежи строк, а затем печатаете.Я бы посоветовал вам изменить этот способ, но если они вам действительно нужны, вы можете посмотреть на ответ @ Deadpool

ArrayList<String> publicNames = new ArrayList<String>(); 

Теперь эта строка не выдаст предупреждение

publicNames.contains(findNames[i])
...