在Kotlin组织一个仅限房产的正确方法是什么?

时间:2017-08-26 16:01:46

标签: java android kotlin

我是Kotlin的新人,但我在Java方面有很多经验。

问题的背景很少......我有一个具有MutableList属性的类。

    class ModesAdapter(val modes : MutableList<Mode> = mutableListOf()) : RecyclerView.Adapter<ModeViewHolder>()

我希望能够设置此属性,但禁止(或限制)获取操作。在Java中它就像:

class ModesAdapter extends RecyclerView.Adapter<ModeViewHolder>{

   private final List<Mode> modes;   

   public ModesAdapter() {
      modes = new ArrayList<Mode>();
   }   

   public ModesAdapter(List<Mode> modes) {
      this.modes = modes;
   }

   public void updateModes(List<Mode> modes) {
      this.modes.clear();
      this.modes.addAll(modes);
      notifyDatasetChanged();
   }
}

对于Kotlin,我有两种可能的选择。

选项#1。使用Kotlin提供的get / set方法+支持属性。在这种情况下,我需要覆盖一个get方法来返回不可变列表。

class ModesAdapter(modes : MutableList<Mode> = mutableListOf()) : RecyclerView.Adapter<ModeViewHolder>(){

    private val _modes : MutableList<Mode> = modes

    var modes : List<Mode>
        get() = _modes.toList()
        set(value) {
            _modes.clear()
            _modes.addAll(value)
            notifyDataSetChanged()
        }
}

理想情况下,我必须删除get或将其设为私有,但由于var modes的可见性,我无法执行此操作。要更新模式,我只需要:

val modesAdapter = ModesAdapter()
modesAdapter.modes = mutableListOf<Mode>(Mode("Mode 1"))

选项#2。只要扔掉所有Kotlin的东西并使用&#34; Java方法&#34;。

class ModesAdapter(private val modes : MutableList<Mode> = mutableListOf()) : RecyclerView.Adapter<ModeViewHolder>(){

    fun updateModes(modes : List<Mode>) {
        this.modes.clear()
        this.modes.addAll(modes)
        notifyDataSetChanged()
    }

要在这种情况下访问模式,我需要:

val modesAdapter = ModesAdapter()
modesAdapter.updateModes(mutableListOf<Mode>(Mode("Mode 1")))

也许第二种方法更清晰,代码行更少,但第一种方法看起来更多&#34; Kotlin风格&#34;:我们有一个属性和单独的setter / getter。

那么从Kotlin的意识形态角度来看,实现上述行为的正确方法是什么?也许你可以建议你自己的正确选择(顺便说一句,这会很好)。

0 个答案:

没有答案