这是我的 Android 应用程序中的一个方法:
public ViewHolderBase buildView(PlayerResult playerResult)
{
View result = inflater.inflate(
R.layout.player_result,
null);
this.helper = new ViewHelper(result);
ViewHolderBase holder = createViewHolder();
TextView playerName = helper.findTextView(R.id.playerName);
holder.setPlayerNameTextView(playerName); // <-- alleged violation
TableLayout tableLayout = helper.findTableLayout(R.id.tlPossibleResults);
populateTableLayout(holder, tableLayout, playerResult);
holder.setView(result); // <-- another one
return holder;
}
Android Studio“认为”这两行违反了得墨忒耳法则:
holder.setPlayerNameTextView(playerName);
holder.setView(result);
我不明白。这是定义:
函数的得墨忒耳定律要求对象 O 的方法 m 只能调用以下几种对象的方法:
- O本身
- m的参数
- 在 m 中创建/实例化的任何对象
- O 的直接组件对象
- 一个全局变量,可以被 O 访问,在 m 范围内
所以?holder
变量在. _m
很公平,它的实例化被委托给createViewHolder
方法......它应该有所作为吗?(附带问题)。
它不适用于 IDE - 如果我holder
直接实例化,仍然会显示警告。
问题:
Android Studio 错了吗?还是我对得墨忒耳法则的理解不够?如果后者是真的,我应该如何重构这个位来满足 LoD?