【问题标题】:Inner Class and Constructors内部类和构造函数
【发布时间】:2016-02-26 11:56:11
【问题描述】:

我想创建一个类,它具有相同的内部类,更具体地说是这样的:

class PassengerComponent extends PlaneComponent
{   
   PassengerComponent InnerPC ;
   int inner ; // checks if PassengerComponent has an inner class

passengerComponent 继承自:

class PlaneComponent
{
   String Description ;
}

问题是内部类应该是随机填充的,也就是说 有时乘客组件会有一个内部组件,有时没有! 我尝试这样做的方式如下:

        int random = (int )(Math.random() * 1 + 0 );
        if( random == 0)
        {
           PassengerComponent PC1 = new PassengerComponent("Passenger Component #1" , 0);    
        }
        else
        {
           PassengerComponent PC1 = new PassengerComponent("Passenger Component #1" , 1); 
        }

       PC1.ready_check(Sc, Cg);

虽然乘客构造函数如下:

    public PassengerComponent( String D , int i)
    {
      Description = D ;
      System.out.println( " PassengerComponent: " + Description + " Has Been Created ");
      switch (i) {
        case 0:
            InnerPC = new PassengerComponent( " Inner Passenger Component #1 " , 2 );
            inner = 1 ;
            break;
        case 1:
            inner = 0 ;
            break ;
        case 2:
            break;
        default:
            break;
       }
    }
  }

调用了构造函数并且输出消息似乎没问题,但是当调用 PC1.ready_check 时,编译器找不到我创建的 PC1! (ready_check 对任何想知道的人都没有任何问题)

抱歉,问题太长了,有什么想法吗?

【问题讨论】:

  • 为什么要使用幻数(0 和 1)来表示它是否有内部?在这种情况下,它是二进制的,所以布尔值hasInner 很好,但 id 仍然更喜欢 Enum 类型安全性和可扩展性。另外,在此过程中,让我们更改 switch 语句以使用 Maps。

标签: java constructor inner-classes


【解决方案1】:

与内部类或PassengerComponent无关,仅与变量作用域有关。

由于PC1 被声明为if/else 块内,它只在该块内是已知的。

如果您想在if/else 块之后使用PC1,请在上一级声明它:

int random = (int )(Math.random() * 1 + 0 );
PassengerComponent PC1;
if( random == 0)
{
    PC1 = new PassengerComponent("Passenger Component #1" , 0);    
}
else
{
    PC1 = new PassengerComponent("Passenger Component #1" , 1); 
}

PC1.ready_check(Sc, Cg);

【讨论】:

  • @SocialProgrammer 如果它解决了你的问题,别忘了接受这个答案。
猜你喜欢
  • 1970-01-01
  • 2011-04-16
  • 2011-09-18
  • 1970-01-01
  • 1970-01-01
  • 2017-01-21
  • 2011-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多