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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 明天,你好 中级黑马   /  2013-5-11 22:26  /  974 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 明天,你好 于 2013-5-15 17:36 编辑

public class  Single<T>
{
        public static T getSingleInstance()
        {
                if(singleInstance==null){
                        return singleInstance;
                }
        }
        private static T singleInstance;
}
这段什么为什么错误?

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

4 个回复

倒序浏览
由于是static它是随着编译后就要加载到JVM中,由于不知道保存的具体类型,jvm不知道怎么分配空间,故会报错
回复 使用道具 举报
本帖最后由 飞鸟青崖 于 2013-5-11 23:13 编辑

第一,泛型只有用在类、接口、方法上,你那第二个是一个变量,不能用。也不是不能用,可以用类上的泛型。
第二,静态方法的泛型不能和类的一样,把静态方法上的泛型换一个字母就行了。

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
这个也太高难度了吧,没错误信息,也没有完整代码,稍微说下我个人观点的问题 :
1、public class  Single<T>  ;   除非你这个类是单独的在一个.java源程序,否则不要添加public;
2、public static T getSingleInstance()           //因为这里(以及下面)的泛型 T 是跟类上的T指向同一个泛型,所以只有创建类对象的时候才能确定泛型,
        {                                                              //所以不能被static修饰;           静态修饰的泛型方法必须是 public static <T> T show(.....){ ....  }
                if(singleInstance==null){                                                              // <T> 的意思是创建一个该方法特有的泛型 T ;(也就和类上的T , 不是同一个)
                        return singleInstance;
                }           //  3、 另外这里还要再加句return 返回语句,因为有不等于null的情况,那么你还是要返回值的。
        }

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报


public class  Single<T>
{      
  private static T singleInstance ;



         public static T getSingleInstance()
        {
                 if(singleInstance==null){
                         return singleInstance;
                 }
         }
}

放到这个位置,就行了,因为上面都没有初始化你,你就使用跟定报错

还有你要是写单例模式的话,你还缺少一个构造方法

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马