相关疑难解决方法(0)

变量应该是最终的内部监听器

可能重复:
不能引用在不同方法中定义的内部类中的非final变量
为什么在匿名类中只能访问最终变量?

在SO和谷歌寻找这个问题的答案,但找不到任何答案.

我有以下代码:

MyClass variable = new MyClass();
Button b = new Button();
b.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e){
         System.out.println("You clicked the button");
         variable.doSomething();
   }
});
Run Code Online (Sandbox Code Playgroud)

编译器返回:

从内部类中访问局部变量变量; 需要宣布最终

什么variable必须是最终的技术原因是什么?

java

2
推荐指数
1
解决办法
2771
查看次数

为什么我应该在多线程程序中"最终"共享变量

我的问题是为什么我应该使用final来装饰变量,列表?它由匿名内部类的实例使用而不是final,它不会编译.

代码如下所示:

public class TwoThreadsOneListCurrModi
{
  public static void main(String[] args)
  {    
     final List<String> list = Collections.synchronizedList(new ArrayList<String>());

    for (int i =0 ; i<20;i++)
      list.add(String.valueOf(i));
    Thread t1 = new Thread(new Runnable(){

      @Override
      public void run()
      {
          synchronize(list) {
          System.out.println("size of list:" +list.size());
          }
      }
    });

    t1.start();  
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用普通课,那很好.

public class TwoThreadsOneListCurrModi2

{
  public static void main(String[] args)
  {    
     final List<String> list = Collections.synchronizedList(new ArrayList<String>());
    initialize list;

    Thread t1 = new WorkThread(list);
    Thread t2 = new WorkThread(list);    
    t1.start();  
    t2.start();
  } …
Run Code Online (Sandbox Code Playgroud)

java concurrency

2
推荐指数
1
解决办法
1734
查看次数

为什么我不能在不同方法中定义的内部类中引用非final变量?

为什么我不能在不同方法中定义的内部类中引用非final变量?
我已经看过关于这方面的主题,并且大多数人都说你的组件应该是最终的...... 但没人说为什么?!! 我不知道这种限制背后的哲学是什么.
令我困惑的是,以下代码是错误的:

JButton removeJBtn = new JButton("Remove");
    JButton addJBtn = new JButton("Add");
    //...
    btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            removeJBtn.disable();//Error here,Cannot ...


        }
    });
Run Code Online (Sandbox Code Playgroud)

而如果我定义

 JButton removeJBtn
Run Code Online (Sandbox Code Playgroud)

作为成员字段(在类的主体中,而不是方法),不需要将其定义为final!


我真的很感激我(也可能是许多其他人)总是面临的每日限制的任何合理答案.


亲爱的用户将此问题标记为重复,请至少提供原始问题的参考(已经得到肯定答复!),在我的问题上面添加了一个链接,我已经仔细阅读但是它充满了矛盾,一些人(88票)表示java捕获了最终变量的值,并且完全被它下面的评论(16票)拒绝.

java final inner-classes

2
推荐指数
1
解决办法
4437
查看次数

1
推荐指数
1
解决办法
435
查看次数

我需要设置一个变量,但我也需要它是最终的.

在下面的代码中,第一个if语句抱怨current_guy不能是a,final但第二个if语句抱怨current_guy不是最终的.我没有想法.

final int current_guy=0;

if (a.equals("bf")){
   current_guy=1;
}

guy1.setOnClickListener(new OnClickListener() {    
   public void onClick(View v) {

   if (current_guy==1) {
      // TODO Auto-generated method stub
   }
}
Run Code Online (Sandbox Code Playgroud)

java android final

1
推荐指数
1
解决办法
152
查看次数

在JButton内部执行的最终变量是否必需?

所以我有一个JList,我试图在一个内部使用它JButton小号actionPerformed方法,它要求我做出JList final这是为什么,下面的代码片段

public SomeClass() {    
  btnNewButton.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
         list.clearSelection();             
    }});
}
Run Code Online (Sandbox Code Playgroud)

我实际上没有问题使它成为最终的,我只是不确定为什么我需要.

java swing final jbutton jlist

1
推荐指数
1
解决办法
1768
查看次数

将Regular Regular Int转换为Final Java

我试图在循环中实现一个内部类,并进入一个有趣的情况.内部类有方法,但是,当我尝试访问变量时,Netbeans给了我一个编译错误并告诉我让int最终.

由于int是循环变量,因此它不能是最终的.我已经尝试创建新变量并将它们等同于循环变量,但这仍然会引发相同的错误.

这是基本语法(伪代码):

for(int i = 0; i < 10; i++)
{
     panels[i].printI(new printI(){System.out.println(i);});
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

java inner-classes

1
推荐指数
1
解决办法
3771
查看次数

一般匿名类实例化问题


我在系统的代码中注意到有人实例化了一个匿名类,如下所示

 Class ExampleClass{

     MyObj obj; 

     methodA(new ClassA(){
         @override public void innerMethodA(){
            //code...
        }
    });
} 
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.
现在,为了使用在方法之前声明的obj,我通常将其定义为final.
我真的不明白为什么,但我这样做,因为编译器要求.在这段代码中,我在innerMethodA()中看到了用法

 ExampleClass.this.obj()
Run Code Online (Sandbox Code Playgroud)

没有最后的.

我的问题:
1.为什么我在使用obj时必须进行最终决定?
2.什么是ExampleClass.this?请注意,ExampleClass是Class而不是实例.什么是"这个"?如果它有几个实例?
3.如果我在内部方法运行时更改obj会发生什么(在我的代码内部方法中循环运行,所以我打算更改它.它会爆炸吗?)

java anonymous-class

0
推荐指数
1
解决办法
621
查看次数

为什么局部变量是最终的?

为什么局部变量最后是方法参数还是内部方法.

private void add(final int a , final int b) {
    final int c = 0;
}
Run Code Online (Sandbox Code Playgroud)

请任何人澄清.我正在搜索很多,但我没有找到确切的答案.

java

0
推荐指数
1
解决办法
226
查看次数

为什么Java内部类需要外部类的变量是最终的?

可能重复:
Java - 内部类和局部变量
如何将变量标记为final允许内部类访问它们?

Local Inner类不仅可以访问实例变量,还可以访问方法的局部变量(在其中定义它们),但必须声明局部变量final.

为什么final在这种情况下必须声明局部变量?

java final

0
推荐指数
1
解决办法
5693
查看次数

为什么最终关键字在方法中大量使用,即使最终没有定义它们也是完全正确的

我问同事他为什么在这种方法中使用final关键字进行分配,他的回答是"为什么不呢?".我没有看到将决赛放在这里的好处.或者经常,我也会在课堂定义中看到它.

protected void sendIndexWorkflowRequest(Status status)
{

    final long contextId = status.getAppContextId();
    PrepareIndexPostData preparePostData = new PrepareIndexPostData.Builder(contextId).build();

    searchIndexService.activateAggsIndex(preparePostData);
}
Run Code Online (Sandbox Code Playgroud)

java final

0
推荐指数
1
解决办法
87
查看次数

Java:不能引用非最终变量

我写了一些代码,一切正常,但是当我在另一台计算机上打开相同的代码时,出现以下错误:

Cannot refer to the non-final local variable usernameTextField defined in an enclosing scope
Cannot refer to the non-final local variable portTextField defined in an enclosing scope
Cannot refer to the non-final local variable usernameTextField defined in an enclosing scope
Cannot refer to the non-final local variable portTextField defined in an enclosing scope
Run Code Online (Sandbox Code Playgroud)

给出此错误的代码:

private static GridPane initGUI(){
    GridPane root = new GridPane();
    TextField usernameTextField = new TextField();
    TextField portTextField = new TextField();
    Button button = new Button("Login!");
    root.add(new Label("Username:"),0,0); …
Run Code Online (Sandbox Code Playgroud)

java javafx

0
推荐指数
1
解决办法
8784
查看次数

不能引用在不同方法中定义的内部类中的非final变量

可能重复:
不能引用在不同方法中定义的内部类中的非final变量

我的程序中有一些问题.

public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activityenter code here`_main);

    ImageView ob4 = (ImageView) findViewById(R.id.imageView4);
    ShapeDrawable d4 = new ShapeDrawable(new OvalShape());


    d4.setIntrinsicHeight(150);
    d4.setIntrinsicWidth(40);
    d4.getPaint().setColor(Color.WHITE);
    d4.setVisible(true, true);
    ob4.setImageDrawable(d4);

    Button btn_start = (Button) this.findViewById(R.id.button1);
    btn_start.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
        //Cannot refer to a non-final variable d4 inside an inner class defined in a      different method
        //But i don't want to make this field "final", becouse i will change color …
Run Code Online (Sandbox Code Playgroud)

java android

-4
推荐指数
1
解决办法
5649
查看次数