我有一种情况,多个类可以扩展一个核心类。有一个属性(比如 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
。如果可能的话,我希望在后一种情况下检查尽可能便宜。我可以想到几种方法:
明显的:true
将在“常量”子类中实现abstract bool isAtomic()
,
子类return true/false
,它将Atomic extends Base
实现为isAtomic()
,其他“常量”子类将扩展(可能与1没有太大差别),
将return true;
实现为isAtomic
的基类和覆盖此定义的非常量子类
由原子子类实现的接口return true;
显然不会返回任何内容,但会使用Atomic
进行检查。
我在OOP方面没有太多经验,但有些东西告诉我,最后一种方法很好地代表了这个概念并保存了一个函数调用,即使使用起来比较复杂。但我不知道x instanceof Atomic || x.isAtomic()
确实比调用函数“更便宜”。 3应该比1或2快,但感觉不到instanceof
函数的性质。专家说什么?或者是否有另一种直观的方式,比我列出的方法更好,我没想到?
答案 0 :(得分:1)
选择你的第一选择。这里没有人能分辨出哪种选择最适合您的特定情况。如果第一个选择结果是坏的并且您必须重新审视它,那么您将学到一些东西。
至于效率,JVM可以内联对短方法的调用。即使您正在调用抽象方法,也会发生这种情况,尤其是当调用站点是单态的时。性能优化非常困难,所以在您知道自己会遇到问题之前不要担心。
我有一种情况,多个类可以扩展一个核心类。
我对你的节目一无所知,但可能想避免这样的情况。