6

I'm having this error:

Type mismatch: cannot convert from element type Object to String

This is the code in error:

public List<String> customPrefixes(PermissionUser u)
{
    List returnlist = new ArrayList();
    for (String k : u.getAllPermissions().keySet()) {
        List perms = (List)u.getAllPermissions().get(k);
        for (String s : perms) {
            String[] split = s.split(".");
            if ((split.length >= 3) && 
              (split[0].equalsIgnoreCase("plugin")) && 
              (split[1].equalsIgnoreCase("prefix"))) {
                returnlist.add(split[2]);
            }
        }
    }
    return returnlist;
}
Tunaki
  • 132,869
  • 46
  • 340
  • 423
PlayinCOD3142
  • 81
  • 1
  • 2
  • 6

3 Answers3

11

try this :

public List<String> customPrefixes(PermissionUser u)
  {
    List<String> returnlist = new ArrayList<String>();
    for (String k : u.getAllPermissions().keySet()) {
      List<String> perms = (List<String>)(u.getAllPermissions()).get(k);
      for (String s : perms) {
        String[] split = s.split(".");
        if ((split.length >= 3) &&
          (split[0].equalsIgnoreCase("plugin")) &&
          (split[1].equalsIgnoreCase("prefix"))) {
          returnlist.add(split[2]);
        }
      }

    }

    return returnlist;
  }

You were missing "<String>" in the List declaration

Lena Bru
  • 13,521
  • 11
  • 61
  • 126
1

I think you're casting is wrong..

What is u.getAllPermissions().get(k); should return? List of something? if it does so you need to add type of the generic list

List<String> perms = (List<String>)u.getAllPermissions().get(k);

If that doesn't work you can also try to do

for (Object o : perms) {
 String s = o.toString();
 .....
}

Hope that helps.. If not answer my question and it will be easier to help

Aviad
  • 1,539
  • 1
  • 9
  • 24
  • Casting it to `Object` works but if we had `List` instead of `List` we will loose the ability to call methods available on `Foo` object inside the for loop – rainversion_3 Oct 16 '19 at 13:19
0

Another reason for this error can be the way you have initialized your container; as a case in point; you have initialize list2 as below:

List list2 = new ArrayList <Integer>();

instead of

List<Integer> list2 = new ArrayList <Integer>();

So, you are looping over a wrong type of container ( if we can call this a container) as below :

for(Integer x:list2){
            System.out.println(x);
        }

Thus, you need to revise the way you have initialize your container ( here is a list) and there is no problem with your datatype, etc.