有没有一种在Dart中实现内部类的方法?

6
//access to a Constant if it was like another language 
ImageWeather.Desktop.cloud; 
 
//What i wanted ( not working because there is no inner class)
class ImageWeather {
      class Desktop {
         static const String cloud = 'assets/images/DesktopCloud.png';
         static const String noCloud = 'assets/images/DesktopNoCloud.png';
         static const String rain = 'assets/images/DesktopRain.png';
   }  
      class Phone{
         static const String cloud = 'assets/images/PhoneCloud.png';
         static const String noCloud = 'assets/images/PhoneNoCloud.png';
         static const String rain = 'assets/images/PhoneRain.png';
   }
}

//access to a String like an inner class with new code
ImageWeather.desktop.cloud;


class ImageWeather {
   static final Desktop desktop = Desktop();
   static final Phone phone = Phone();
}

class Desktop {
   get cloud => 'assets/images/DesktopCloud.png';
   get noCloud => 'assets/images/DesktopNoCloud.png';
   get rain => 'assets/images/DesktopRain.png';
}
class Phone {
   get cloud => 'assets/images/PhoneCloud.png';
   get noCloud => 'assets/images/PhoneNoCloud.png';
   get rain => 'assets/images/PhoneRain.png';

我目前正在学习Dart,但发现无法使用内部类。 在Dart中是否有一种类似于内部类的编写方式?


1
内部类模式很不寻常。水獭类的类设计没有遵循“单一职责”原则。在这种情况下,一个单一类(ImageWeather)定义了两个不同的类。因此,在API中不清楚你实际上正在访问什么。因此,使用两个不同的类提供了两个类之间明确的解耦关系。 - Apealed
1个回答

3

使用内部类是好是坏,这是主观的。不同的开发人员会有不同的意见。

但是,如果你希望只让 ImageWeather 可见 DesktopPhone,你可以在一个包中编写这三个类,并将“内部”类重命名为_Desktop_Phone,从而使它们只在该包内可见。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接