Hi大家好!我的C++代码里头,每个cpp文件都会定义一个与自己的类相关的一个全局变量,用来把自己的类型信息注册到用模板实现的Factory里头去。因为这些cpp的全局变量会在main开始执行之前先构造,所以程序进入main时,这些注册信息就已经可以用了。
但是在java里头,没有全局变量,或者说是在类里头用public域来实现。但是这些public域,即使是static的,也必须在class被加载并初始化后才有机会执行。
那么,我就没有办法像c++上述的做法那样,让每个cpp文件去自己定义那个全局变量了。因为java里头这些class必须在第一次使用的时候才能初始化,才有机会执行那些public域的初始化。请问有什么办法解决这个问题吗?
谢谢!

解决方案 »

  1.   

    在你的类里,定义一个变量,用static修饰,它就是所谓的全局变量了,你在其他别的类里,也可以用类名.变量名使用它了,而不需要new这个类的对象
      

  2.   

    是的。但问题是,我用C++模板的话,我可以把cpp定义的类型注册到Factory里头去,然后再需要的时候,让Factory帮我做new T去得一个类的对象。所以整个程序里头,我都可以只用BaseType去指向这些cpp定义的具体类型。现在到了Java里头,如果想要引用public static变量,我就要知道具体的类型名,然后就像你说的用类型.域名去引用。
    java的模板还没有办法直接使用new T。当然可以用别的方式去解决,问题还是那个全局变量要在main之前让他自己执行,我不要看到具体的类型名。
    谢谢!
      

  3.   

    不是很理解楼主的意思。你想在main之前执行,就搞个静态块,让他自己初始化就是了。面向对象,你操作时肯定要指明是哪个对象啊。呵呵
      

  4.   

    1、java有全局变量,即用public static 来修饰
    2、main()函数是程序执行的入口,也就是说,还没进去就像得到程序里面的东西,估计不行吧。
    3、java是面向对象的语言,不知道对象名称就访问对象,估计够呛的
    没学过C++的人飘过