Java如何使“静态”变量名称成为动态

时间:2015-04-16 08:34:47

标签: java static

假设我有一个班级孩子

public class child{
  public static int age = 1;
}

我在班级学校使用班级儿童静态变量年龄

public class school{
 int var_age;
  public school(){     //school constructor
   var_age = child.age;
 }
}

根据一些逻辑,以下任何一个孩子的年龄值可能是以下任何一个:

public static int age = 1;
public static int age = 2;

我怎样才能实现这个应该应用逻辑的地方?此外,强制要求学校代码保持相同

1 个答案:

答案 0 :(得分:0)

您提供的信息很少,关于这将是什么类型的逻辑,但无论如何它应该在班级Child内。根据什么类型的逻辑,我可能会把它放在构造函数中。


假设您有以下内容:

    public class Child(){
       public static int age = 1;

       public Child(){
       }
    }

    public class School(){
       int var_age;

       public School(){
          var_age = Child.age;
       }
    }

使用此代码,类var_age中的变量School将始终分配给相同的值。在这种情况下,这将是 1 。如果您想依赖于逻辑,则必须在某个地方(在Child课程中)实施它,因为您不允许编辑课程School) 。有两种明显的方法可以做到这一点;

  • 第一种方式 - 构造函数方式:

    public class Child(){
       public static int age = 1;
    
       public Child(){ 
          age = yourLogic(); // Assign age depending on your logic here!
       }
    }
    

通过这种方式,您的变量age将具有默认值 1 ,并且一旦创建了Child类型的对象,将采用您的逻辑定义的值。然而,根据您的反馈意见,您可能需要的是第二个版本。

  • 第二种方式 - 田野:

    public class Child(){
       public static int age = yourLogic(); // Assign age to logic here!
    
       public Child(){
       }
    }
    

这样,变量age将逻辑定义的值作为默认值,因此即使没有创建类Child的实例。这可能就是你要找的东西。但请注意: 根据逻辑的计算复杂程度,这可能是一种非常糟糕的做法。


顺便说一句,不要将java静态与" dynamic"的反义词混淆。 java意义上的static仅表示变量绑定到类型而不是 instance / Object 。这意味着无需调用或创建周围类的实例即可访问它。如果你想要与动态相反,那就是java中的final