A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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个对象以外有没有办法解决?

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

13 个回复

倒序浏览
{:soso_e136:}  没人么....
回复 使用道具 举报
帮顶
回复 使用道具 举报
老罗 发表于 2012-3-8 21:47
帮顶

谢谢老罗:handshake
回复 使用道具 举报
x需要定义为final类型,内部类只能访问final修饰的局部变量
回复 使用道具 举报
王思兰 发表于 2012-3-8 21:58
x需要定义为final类型,内部类只能访问final修饰的局部变量

额....     我只是举例想达到这个效果,这个for循环的x是不能定义成final的
回复 使用道具 举报
杨毅 发表于 2012-3-8 22:01
额....     我只是举例想达到这个效果,这个for循环的x是不能定义成final的

哦,final不能改变值,不作为内部类,改成外部类 应该行吧
回复 使用道具 举报
本帖最后由 马胜平 于 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:32:57
10#
王思兰 发表于 2012-3-8 22:28
我也不知道了,不好意思

:handshake     没什么不好意思的,共同学习,还是谢谢你
回复 使用道具 举报
杨毅 黑马帝 2012-3-8 22:31:55
11#
马胜平 发表于 2012-3-8 22:20

晕...  打印1,2,3,4只是举例,方便看下,实际window中的代码很复杂....
回复 使用道具 举报
马胜平 发表于 2012-3-8 22:20

如果非要使用内部类的话,你再怎么去把类实现接口都没用吧。
回复 使用道具 举报
杨毅 黑马帝 2012-3-9 09:23:56
13#
哦哦哦...  这样子可以
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-8 22:32
没什么不好意思的,共同学习,还是谢谢你

:lol好,努力
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马