初学者询问一个关于匿名类传值的问题,请各位前辈帮忙

其实我也恋长安 2020-10-26 05:30:55
public class People {

public interface Runner {
void run();
}
public void stuAge(int num){
System.out.println("The age of the Student is"+num);
}

public static void main(String[] args) {
Runner runner = new Runner() {
@Override
public void run1() {
int age = 18;
System.out.println("run 10 miles!");
}
};
runner.run();

People people = new People();
people.stuAge(age);
}
}

我想知道如何把匿名内部类的age传到外面stuAge中,请各位前辈帮忙看看
...全文
2964 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2020-10-27
  • 打赏
  • 举报
回复
用个list保存结果就可以了
for example

public class People {

public static interface Runner {
void run();
}
public void stuAge(int num){
System.out.println("The age of the Student is"+num);
}

public static void main(String[] args) {
List<Integer> list = new ArrayList<>(); //用于保存内部类的结果
Runner runner = new Runner() {
@Override
public void run() {
int age = 18;
list.add(age); //保存内部类处理结果
System.out.println("run 10 miles!");
}
};
runner.run();

People people = new People();
people.stuAge(list.get(0)); //使用保存的结果
}
}
KeepSayingNo 2020-10-27
  • 打赏
  • 举报
回复

public class People {
    private Integer age;
    public interface Runner {
        void run();
    }
    public void stuAge(int num){
        System.out.println("The age of the Student is"+num);
    }
 
    public static void main(String[] args) {
        Runner runner = new Runner() {
            @Override
            public void run1() {
                this.setAge(18);
                System.out.println("run 10 miles!");
            }
        };
        runner.run();
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}
  • 打赏
  • 举报
回复
引用 6 楼 qq_39936465 的回复:
[quote=引用 1 楼 其实我也恋长安 的回复:]
/**
 * @description: 匿名内部类
 * @author:
 * @date: 2020/10/26 9:47
 */
public class People {

    public interface Runner1 {
        void run1();
        int run2();
    }

    public void stuAge(int num){
        System.out.println("The age of the Student is " + num);
    }

    public static void main(String[] args) {
        Runner1 runner = new Runner1() {
            int age;
            @Override
            public void run1() {
                age = 18;
                System.out.println("run 10 miles!");
            }

            @Override
            public int run2() {
                return age;
            }
        };
        runner.run1();

        People people = new People();
        people.stuAge(runner.run2());
    }
}
除了使用这个办法,还有其他办法吗?假如接口是无法修改的情况下

public class People {
	 
	int age;
	
    public interface Runner {
        void run();
    }
    public void stuAge(int num){
        System.out.println("The age of the Student is"+num);
    }
 
    public static void main(String[] args) {
    	People people = new People();
        Runner runner = new Runner() {
            @Override
            public void run() {
                people.setAge(18);
                System.out.println("run 10 miles!");
            }
			
        };
        runner.run();
 
        people.stuAge(people.getAge());
    }
    public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}
[/quote]谢谢,你这个补足了1楼的答案。
qq_39936465 2020-10-27
  • 打赏
  • 举报
回复
引用 1 楼 其实我也恋长安 的回复:
/**
 * @description: 匿名内部类
 * @author:
 * @date: 2020/10/26 9:47
 */
public class People {

    public interface Runner1 {
        void run1();
        int run2();
    }

    public void stuAge(int num){
        System.out.println("The age of the Student is " + num);
    }

    public static void main(String[] args) {
        Runner1 runner = new Runner1() {
            int age;
            @Override
            public void run1() {
                age = 18;
                System.out.println("run 10 miles!");
            }

            @Override
            public int run2() {
                return age;
            }
        };
        runner.run1();

        People people = new People();
        people.stuAge(runner.run2());
    }
}
除了使用这个办法,还有其他办法吗?假如接口是无法修改的情况下

public class People {
	 
	int age;
	
    public interface Runner {
        void run();
    }
    public void stuAge(int num){
        System.out.println("The age of the Student is"+num);
    }
 
    public static void main(String[] args) {
    	People people = new People();
        Runner runner = new Runner() {
            @Override
            public void run() {
                people.setAge(18);
                System.out.println("run 10 miles!");
            }
			
        };
        runner.run();
 
        people.stuAge(people.getAge());
    }
    public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}
  • 打赏
  • 举报
回复
引用 3 楼 qybao 的回复:
用个list保存结果就可以了 for example

public class People {
     
    public static interface Runner {
        void run();
    }
    public void stuAge(int num){
        System.out.println("The age of the Student is"+num);
    }
 
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>(); //用于保存内部类的结果
        Runner runner = new Runner() {
            @Override
            public void run() {
                int age = 18;
                list.add(age); //保存内部类处理结果
                System.out.println("run 10 miles!");
            }
        };
        runner.run();
 
        People people = new People();
        people.stuAge(list.get(0)); //使用保存的结果
    }
}
这个可以,谢谢。
  • 打赏
  • 举报
回复
引用 2 楼 KeepSayingNo 的回复:

public class People {
    private Integer age;
    public interface Runner {
        void run();
    }
    public void stuAge(int num){
        System.out.println("The age of the Student is"+num);
    }
 
    public static void main(String[] args) {
        Runner runner = new Runner() {
            @Override
            public void run1() {
                this.setAge(18);
                System.out.println("run 10 miles!");
            }
        };
        runner.run();
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}
这个不行,this.setAge(18);报错
  • 打赏
  • 举报
回复
/**
 * @description: 匿名内部类
 * @author:
 * @date: 2020/10/26 9:47
 */
public class People {

    public interface Runner1 {
        void run1();
        int run2();
    }

    public void stuAge(int num){
        System.out.println("The age of the Student is " + num);
    }

    public static void main(String[] args) {
        Runner1 runner = new Runner1() {
            int age;
            @Override
            public void run1() {
                age = 18;
                System.out.println("run 10 miles!");
            }

            @Override
            public int run2() {
                return age;
            }
        };
        runner.run1();

        People people = new People();
        people.stuAge(runner.run2());
    }
}
除了使用这个办法,还有其他办法吗?假如接口是无法修改的情况下

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧