黑马程序员技术交流社区

标题: 高手解惑 [打印本页]

作者: 明天,你好    时间: 2013-5-11 22:26
标题: 高手解惑
本帖最后由 明天,你好 于 2013-5-15 17:36 编辑

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

作者: fjl_fight    时间: 2013-5-11 22:53
由于是static它是随着编译后就要加载到JVM中,由于不知道保存的具体类型,jvm不知道怎么分配空间,故会报错
作者: 飞鸟青崖    时间: 2013-5-11 23:03
本帖最后由 飞鸟青崖 于 2013-5-11 23:13 编辑

第一,泛型只有用在类、接口、方法上,你那第二个是一个变量,不能用。也不是不能用,可以用类上的泛型。
第二,静态方法的泛型不能和类的一样,把静态方法上的泛型换一个字母就行了。
作者: zms2100    时间: 2013-5-11 23:04
这个也太高难度了吧,没错误信息,也没有完整代码,稍微说下我个人观点的问题 :
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的情况,那么你还是要返回值的。
        }
作者: 仲伟    时间: 2013-5-11 23:13


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



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

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

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




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