Java Reflection, Ignore case when using GetDeclaredField

前端 未结 7 672
不思量自难忘°
不思量自难忘° 2021-01-18 05:08

Let\'s say I have a class with a string field named \"myfield\", and use reflection to get the field, I\'ve found that Object.getClass().getDeclaredField(\"myfield\");

7条回答
  •  鱼传尺愫
    2021-01-18 05:59

    I don't mean to necro this thread but if you used any of the methods above inside a loop your performance will be awful. Create map beforehand

    first take the item your search for to uppercase

    item.getKey()
    

    now create a map that has the uppercase version and the true fieldnames

    Map fieldNames = Arrays.asList(clazz.getDeclaredFields()).stream().collect(Collectors.toMap(t -> t.getName().toUpperCase(), f->f.getName()));
    

    now use that to grab the true fieldname

      Field field = clazz.getDeclaredField(fieldNames.get(key));
    

    I would say always create such a map, always consider performance when it comes to reflection.

提交回复
热议问题