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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始



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>




不明白为什么这么报错啊,请马友讲解下!!

5 个回复

倒序浏览
本帖最后由 孙利川 于 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:20
Test.function()方法没有返回值呀,应该给方法加上返回值。

如下代码:

恩,刚看了半天看明白了,function().method(); 这个function必须是返回一个拥有method方法的对象才可以。
回复 使用道具 举报
本帖最后由 孙利川 于 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方法的对象。
回复 使用道具 举报
第一次见到这个错误,学习了!
如果是我为了执行一次method方法,会在匿名内部类后加上.method() 然后直接test.function();
回复 使用道具 举报
葛尧 发表于 2012-4-4 21:23
第一次见到这个错误,学习了!
如果是我为了执行一次method方法,会在匿名内部类后加上.method() 然后直接t ...

恩,我昨天还没学到直接匿名内部类直接.内部方法,哈哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马