2012-06-14 41 views
0

我正在使用JSoup,我正在做一些节点遍历。访客模式Java和全局变量

String myString; 
NodeTraversor articleNodeTraversor = new NodeTraversor(new NodeVisitor() { 

      @Override 
      public void tail(Node node, int depth) { 
       //Do some processing. 
            myString += "foo"; 
      } 

      @Override 
      public void head(Node node, int depth) { 
       //Do some processing. 
      } 
     }); 

首先,这种编程叫什么?访客模式?其次,如果myString是全局的,上面的代码才有效。我怎样才能使我的字符串本地只有它正在创建的方法,仍然使上述工作?

谢谢!

回答

1

您正在使用匿名类,因此它们只能访问上下文之外的最终局部变量(假设它在方法中声明)以及类的任何变量(静态或非静态)。您也可以在内部类中声明变量,但不允许静态非最终变量声明。

+0

你是说如果我想在内部类和声明myString的方法中修改它,我必须让myString成为全局变量? – itgiawa

+0

不确定全球是什么意思,因为这是面向对象。但可以将内部类这样的代码' NodeTraversor articleNodeTraversor =新NodeTraversor内声明字符串变量(新NodeVisitor(){ 字符串的myString; @Override 公共无效尾(节点节点,INT深度){// 待办事项一些处理 的myString + = “foo” 的; } @Override 公共无效头(节点节点,INT深度){// 做一些处理 } });' –

+0

我ened起来使其不匿名,以便我可以从内部类声明的方法访问该变量。谢谢! – itgiawa

0

该块new NodeVisitor() {}被称为匿名Inter Class。

您可以将块中的变量视为普通类。