目前我的应用程序主要是.app包中的一堆Java文件。我通过给类起奇数名称来模拟层次结构。
My_0_MainActivity.java
My_0_CenterLayout.java
My_1_1_0_CenterPageOptionsFragment.java
My_1_1_1_CenterPageGridFragment.java
My_1_1_CenterPagerFragment.java
My_1_2_CenterSettingsFragment.java
My_2_DrawerLeftBaseFragment.java
My_3_0_DrawerRightDatePickerFragment.java
My_3_1_DrawerRightOptionsFragment.java
My_3_DrawerRightBaseFragment.java
...
应该反映
MainActivity.java
+-CenterFragment.java
| +-CenterPagerFragment.java
| | +-CenterPageOptionsFragment.java
| | +-CenterPageGridFragment.java
| +-CenterSettingsFragment.java
+-DrawerLeftBaseFragment.java
+-DrawerRightBaseFragment.java
+-DrawerRightDatePickerFragment.java
+-DrawerRightOptionsFragment.java
所以我想我会创建这样的子包
.app.MainActivity.java
.app.center.BaseFragment.java
.app.center.pager.MainFragment.java
.app.center.pager.page.OptionsFragment.java
.app.center.pager.page.GridFragment.java
.app.center.settings.MainFragment.java
.app.drawer.left.MainFragment.java
.app.drawer.right.MainFragment.java
.app.drawer.right.page.DatePickerFragment.java
.app.drawer.right.page.OptionsFragment.java
开始重构时,我收到了消息
Error:(260, 50) error: m_strTitle is not public in My_0_ApplicationState.TopicObject; cannot be accessed from outside package
这是因为My_0_ApplicationState
,它在.app包中包含一个名为 TopicObject 的类,该类具有一个名为 m_strTitle 的私有成员,我正在从这个新包center.pager.MainFragment
访问该成员,它曾经是.app包中My_0_ApplicationState
的同级,名为 My_1_1_CenterPagerFragment
。以前,虽然它们都在同一个包中,但这不是一个错误。
将 TopicObject 的成员更改为公共可以解决此问题,但这让我思考我是否可能使这种重构错误。
进行这种重构是好事,还是应该使用另一种方法?这种重构会让我的代码更干净,还是引入一种不应该这样做的方法?
在代码中使用适当的包可以使以后更清晰,更易于阅读。您唯一应该注意向外界公开的内容,请使用适当的访问修饰符或提供访问数据的替代方法。