I want to reflect a private list in Java, add some elements to an instance of it, and set the original list to the instance. How can I do this? I tried the using fields, but Java is unable to cast a Field to a List.
            Asked
            
        
        
            Active
            
        
            Viewed 136 times
        
    -3
            
            
        - 
                    You have a field of type `List`? you want to retrieve the referenced `List` object and add something to it? – Sotirios Delimanolis Apr 07 '15 at 18:50
- 
                    2Seems like an XY problem. Why do you want to do that? If the list is private maybe there's a reason... – Alexis C. Apr 07 '15 at 18:52
- 
                    The list contains textures for a game (Minecraft). The Minecraft Forge developers told me that to add textures from an external source I should reflect this list and add to it. – ashjack Apr 07 '15 at 18:53
- 
                    I expect the devs to be smarter than that. Isn't there a method to add a new texture in this list? Using reflection for this seems like an ugly hack... – Alexis C. Apr 07 '15 at 18:54
1 Answers
0
            Use Field.get and Field.set.
Field field = Foo.class.getField("fieldName");
List<Bar> list = (List<Bar>) field.get(myFoo);
List<Bar> changedList = changeList(list);
field.set(myFoo, changedList);
 
    
    
        Louis Wasserman
        
- 191,574
- 25
- 345
- 413
- 
                    I'm probably going to look like an idiot for asking this, but what should myFoo be? I tried instancing a list as an arraylist, but it gives me java.lang.IllegalArgumentException – ashjack Apr 08 '15 at 08:07
