Java向动态添加的代码中添加常量

Java向动态添加的代码中添加常量,java,focuslistener,Java,Focuslistener,是否可以将常量添加到添加到对象的代码中?因此,如果我的psudo代码在下面的何处运行,那么所讨论的对象获得了焦点,此时ZZZ中的值会被打印出来吗 public void addStupidListener(JTextField textField, String ZZZ) { textField.addFocusListener(new FocusListener() { @Override public void focusGained(FocusEv

是否可以将常量添加到添加到对象的代码中?因此,如果我的psudo代码在下面的何处运行,那么所讨论的对象获得了焦点,此时ZZZ中的值会被打印出来吗

public void addStupidListener(JTextField textField, String ZZZ) {
    textField.addFocusListener(new FocusListener() {

        @Override
        public void focusGained(FocusEvent e) {
            System.out.println("selected" + ZZZ);
        }

        @Override
        public void focusLost(FocusEvent e) {
            System.out.println("de-selected" + ZZZ);
        }
    });
}

不,这不是工作。您混合了初始化和执行代码。您为将来的执行放置了一个侦听器,它在初始化字符串时如何接受该字符串。不要做这样的事情,这很烦人。

通常,您可以在匿名类中捕获堆栈变量。这里有一个例子。我想你想做的会奏效的

public class AnonymousTest {


    public static void main(String[] args){

        Object obj = someObject("Hey world!");
        System.out.println(obj);
    }

    public static Object someObject(String str){
        return new Object(){
            public String toString(){
                return super.toString()+str;
            }
        };
    }
}

输出:stackoverflow.AnonymousTest$1@7f31245aHey世界

当你编译并运行这段代码时会发生什么?为了让它更通用,你是在问你是否可以在匿名类中使用堆栈变量?我觉得我的代码在写的时候工作真的很愚蠢。我想如果你不让ZZZ字符串最终显示出来,你会得到一个编译器错误。如果变量是最终的,eclipse允许这样做。我认为它不会像写的那样工作。我希望有办法把它编码。然而,它确实有效。