关于匿名内部类的问题?!!!

小p变砖头 2010-07-22 08:56:17
大家好!java编程思想上看到一实例,有些不解,还希望大家解答下!
匿名内部类使用外部定义的对象,编译器要求其参数是final的。而该实例中的x却没有声明为final,但是正常运行。何解?
package innerclasses;

class Wrapping
{
private String i;
public Wrapping(String x)//为什么参数不加final
{
i=x;
}
@Override
public String toString()
{
return ""+i;
}
}
public class Parcel
{
public Wrapping wrapping(String x)
{
return new Wrapping(x)
{};
}

public static void main(String[] str)
{
Parcel p = new Parcel();
Wrapping w = p.wrapping("15");
System.out.println(w.toString());
}
}
...全文
98 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wang_fenghua 2010-07-23
  • 打赏
  • 举报
回复
嘿嘿,楼主够爽快,大家一块努力哈 ~~~~
小p变砖头 2010-07-22
  • 打赏
  • 举报
回复
仔细看了下书 确实是这个原因
wang_fenghua 2010-07-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wang_fenghua 的回复:]
楼主你问题提错地方了 应该是在

Java code

public String toString()
{
return ""+i;
}
}
public class Parcel
{
public Wrapping wrapping(String x)//为什么参数不加final
{
return new Wrapping(x)
{};
}



……
[/Quote]这解释绝对正确 给分吧 哈哈 仔细看看P213 的两个例题 你就明白了
wang_fenghua 2010-07-22
  • 打赏
  • 举报
回复
楼主你问题提错地方了 应该是在

public String toString()
{
return ""+i;
}
}
public class Parcel
{
public Wrapping wrapping(String x)
{
return new Wrapping(x) //为什么参数不加final
{};
}


我仔细看了下ThinkinginJava 个人见解:x 对象被传递给匿名类的基类的构造器,并没有直接在匿名类内部直接使用。 相见:Thinkinginjava 第三版 P213 例子:AnonymousConstructor.java
heartraid86 2010-07-22
  • 打赏
  • 举报
回复


class Wrapping
{
private String i;
public Wrapping(String x){//为什么参数不加final
i=x;
}
@Override
public String toString(){
return ""+i;
}
}

public class Test {

public Wrapping wrapping(final String x){
return new Wrapping(x){
String name=x; //匿名内部类使用外部定义的String对象x
};
}
}


实际上,应该是匿名内部类使用包含在这个内部类的方法中的局部变量的时候,需要变量声明为final。这些局部变量可以是方法的参数。
捏造的信仰 2010-07-22
  • 打赏
  • 举报
回复
你这样并不是内部类哦。

public class AnonymousInnerClass {

public static void main(String[] args) {

// 匿名 Runnable 类中使用了变量 n,于是
// 编译器要求 n 的定义是 final 的。
final int n = 10;

new Runnable() {

public void run() {
System.out.println("This is " + n);
}

}.run();
}
}
xxqi1229 2010-07-22
  • 打赏
  • 举报
回复
public class OutClass//外部类
{
class InnerClass//内部类
{
}
}
ZangXT 2010-07-22
  • 打赏
  • 举报
回复
局部类,方法中定义的那种。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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