课堂上有条件的恒定属性:什么是最佳实践?

时间:2016-03-06 11:11:10

标签: java oop

我有一种情况,多个类可以扩展一个核心类。有一个属性(比如 username = mUsername.getText().toString(); password = mPassword.getText().toString(); mResult.setText(username + ":" + password); mCombination = username + ":" + password; byte[] byteArray = new byte[0]; try { byteArray = mCombination.getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } final String base64 = Base64.encodeToString(byteArray, Base64.NO_WRAP); mEncoded.setText(base64); ),在某些子类中,它依赖于数据,但在其他子类中将始终为isAtomic。如果可能的话,我希望在后一种情况下检查尽可能便宜。我可以想到几种方法:

  1. 明显的:true将在“常量”子类中实现abstract bool isAtomic()

  2. 子类return true/false,它将Atomic extends Base实现为isAtomic(),其他“常量”子类将扩展(可能与1没有太大差别),

  3. return true;实现为isAtomic的基类和覆盖此定义的非常量子类

  4. 由原子子类实现的接口return true;显然不会返回任何内容,但会使用Atomic进行检查。

  5. 我在OOP方面没有太多经验,但有些东西告诉我,最后一种方法很好地代表了这个概念并保存了一个函数调用,即使使用起来比较复杂。但我不知道x instanceof Atomic || x.isAtomic()确实比调用函数“更便宜”。 3应该比1或2快,但感觉不到instanceof函数的性质。专家说什么?或者是否有另一种直观的方式,比我列出的方法更好,我没想到?

1 个答案:

答案 0 :(得分:1)

选择你的第一选择。这里没有人能分辨出哪种选择最适合您的特定情况。如果第一个选择结果是坏的并且您必须重新审视它,那么您将学到一些东西。

至于效率,JVM可以内联对短方法的调用。即使您正在调用抽象方法,也会发生这种情况,尤其是当调用站点是单态的时。性能优化非常困难,所以在您知道自己会遇到问题之前不要担心。

  

我有一种情况,多个类可以扩展一个核心类。

我对你的节目一无所知,但可能想避免这样的情况。