您不能对接口执行此操作。但是,可以修改static final类中的变量:
public abstract class I {
    static final int val; 
    static
    {
        val = 1;
    }
}
import java.lang.reflect.*;
public class NotFinal
{
    public static void main(String args[]) throws Exception
    {
        System.out.println(I.val); // Before: 1     
        Field field = I.class.getDeclaredField("val");
        field.setAccessible(true);
        Field modifiersField = Field.class.getDeclaredField("modifiers");
        modifiersField.setAccessible(true);
        modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
        field.set(null, 2);
        System.out.println(I.val); // After: 2
    }
}
输出:
1
2
请注意,如果您在声明中分配值,则这不起作用,即
static final int val = 1;
因为编译器对此的处理方式不同(作为常量) - 请参阅此答案。