黑马程序员技术交流社区

标题: 没有求助标记了么... 手动求助,求助!!!!!!! [打印本页]

作者: 杨毅    时间: 2012-3-8 21:18
标题: 没有求助标记了么... 手动求助,求助!!!!!!!
class Window{
       
        Window(int x){
                System.out.println(x);
        }
}

如上有这么一个类,我想用四个线程创建4四个Window对象,分别传入1,2,3,4,   
就是想达到这个效果,如果x能访问的话:
import java.util.concurrent.*;

public class FinalTest {

        public static void main(String[] args) {
               
                for(int x =0;x<5;x++){
                 ExecutorService window = Executors.newSingleThreadExecutor() ;
                 window.execute(new Runnable(){
                        public void run() {                       
                                new Window(x);
                        }
                         
                 });
                }
        }
}

但内部类不能访问到x,想问下 ,除了手动new4个对象以外有没有办法解决?
作者: 杨毅    时间: 2012-3-8 21:43
{:soso_e136:}  没人么....
作者: 老罗    时间: 2012-3-8 21:47
帮顶
作者: 杨毅    时间: 2012-3-8 21:48
老罗 发表于 2012-3-8 21:47
帮顶

谢谢老罗:handshake
作者: 王思兰    时间: 2012-3-8 21:58
x需要定义为final类型,内部类只能访问final修饰的局部变量
作者: 杨毅    时间: 2012-3-8 22:01
王思兰 发表于 2012-3-8 21:58
x需要定义为final类型,内部类只能访问final修饰的局部变量

额....     我只是举例想达到这个效果,这个for循环的x是不能定义成final的
作者: 王思兰    时间: 2012-3-8 22:15
杨毅 发表于 2012-3-8 22:01
额....     我只是举例想达到这个效果,这个for循环的x是不能定义成final的

哦,final不能改变值,不作为内部类,改成外部类 应该行吧
作者: 马胜平    时间: 2012-3-8 22:20
本帖最后由 马胜平 于 2012-3-8 22:22 编辑
  1. class Window implements Runnable{
  2.         private int x;
  3.         Window(int x){
  4.                     this.x=x;
  5.              }

  6.         @Override
  7.         public void run() {
  8.                 System.out.println(x);
  9.                
  10.         }
  11.        
  12. }  自定义实现Runnable接口的任务不就行了
复制代码

作者: 王思兰    时间: 2012-3-8 22:28
我也不知道了,不好意思
作者: 杨毅    时间: 2012-3-8 22:31
马胜平 发表于 2012-3-8 22:20

晕...  打印1,2,3,4只是举例,方便看下,实际window中的代码很复杂....
作者: 杨毅    时间: 2012-3-8 22:32
王思兰 发表于 2012-3-8 22:28
我也不知道了,不好意思

:handshake     没什么不好意思的,共同学习,还是谢谢你
作者: 泮和顺    时间: 2012-3-8 22:38
马胜平 发表于 2012-3-8 22:20

如果非要使用内部类的话,你再怎么去把类实现接口都没用吧。
作者: 杨毅    时间: 2012-3-9 09:23
哦哦哦...  这样子可以
public class FinalTest {

        public static void main(String[] args) {
                int[] arr = new int[]{1,2,3,4};
                for(int x =0;x<4;x++){
                 final int y = arr[x];
                        ExecutorService window = Executors.newSingleThreadExecutor() ;
                 window.execute(new Runnable(){
                        public void run() {                       
                                new Window(y);
                        }                         
                 });
                }
        }

这个算自问自答么...  有双倍分么 {:soso_e120:}
作者: 王思兰    时间: 2012-3-9 14:55
杨毅 发表于 2012-3-8 22:32
没什么不好意思的,共同学习,还是谢谢你

:lol好,努力




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2