黑马程序员技术交流社区

标题: 关于内部匿名内部类中一个返回值问题 [打印本页]

作者: 石好强    时间: 2012-4-4 20:11
标题: 关于内部匿名内部类中一个返回值问题


interface Inter
{
        void method();
}       

class Test
{
         class Inner implements Inter
        {
                public void method()
                {
               
                        System.out.println("测试");
                }
       
        }
       
        public static void function()
        {
                new Inter()
                {
                        public void method()
                        {
                       
                                System.out.println("测试");
                        }
               
                };
       
        }
       
       

}


class InnerClassTest2
{
        public static void main(String[] args)
        {
                Test.function().method();
        }
}









上面代码报错为:

D:\java1203\day09>javac InnerClassTest2.java
InnerClassTest2.java:43: 无法取消引用 void
                Test.function().method();
                               ^
1 错误

D:\java1203\day09>




不明白为什么这么报错啊,请马友讲解下!!
作者: 孙利川    时间: 2012-4-4 20:20
本帖最后由 孙利川 于 2012-4-4 20:23 编辑

Test.function()方法没有返回值呀,应该给方法加上返回值。

如下代码:

interface Inter
{
        void method();
}        

class Test
{
         class Inner implements Inter
        {
                public void method()
                {
               
                        System.out.println("测试");
                }
        
        }
        
        public static Inter function()                    //将void改为Inter
        {
               return new Inter()                           //加上return
                {
                        public void method()
                        {
                        
                                System.out.println("测试");
                        }
               
                };
        
        }
        
        

}


class InnerClassTest2
{
        public static void main(String[] args)
        {
                Test.function().method();
        }
}

作者: 石好强    时间: 2012-4-4 20:40
孙利川 发表于 2012-4-4 20:20
Test.function()方法没有返回值呀,应该给方法加上返回值。

如下代码:

恩,刚看了半天看明白了,function().method(); 这个function必须是返回一个拥有method方法的对象才可以。
作者: 孙利川    时间: 2012-4-4 20:51
本帖最后由 孙利川 于 2012-4-4 20:53 编辑
石好强 发表于 2012-4-4 20:40
恩,刚看了半天看明白了,function().method(); 这个function必须是返回一个拥有method方法的对象才可以 ...


是呀,
new Inter()
                {
                        public void method()
                        {
                        
                                System.out.println("测试");
                        }
               
                };
这只是一个语句,函数执行完,new 对象就不存在了,必须返回。
function必须是返回一个拥有method方法的对象。
作者: 葛尧    时间: 2012-4-4 21:23
第一次见到这个错误,学习了!
如果是我为了执行一次method方法,会在匿名内部类后加上.method() 然后直接test.function();
作者: 石好强    时间: 2012-4-5 15:01
葛尧 发表于 2012-4-4 21:23
第一次见到这个错误,学习了!
如果是我为了执行一次method方法,会在匿名内部类后加上.method() 然后直接t ...

恩,我昨天还没学到直接匿名内部类直接.内部方法,哈哈




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