2013/03/14

[android]覚えているものを忘れるしくみ

Androidというか、Javaだ。

FeliCa Liteを操作するclassを作った(前から作ってたやつだが)。
最初は、MifareUltralightみたいに、NfcFに毛が生えたような操作だけ追加しようと考えていた。
が、

public final class NfcF extends BasicTagTechnology {

と、finalになってた。
じゃあ継承できんので所有させようかと思ったのだが、NfcF互換にするならメソッドを全部呼べるようにせんといかん。

うーん、それはめんどくさい。
ということで、NfcF互換は諦め、別のものにした。

https://github.com/hirokuma/FLFMT/blob/master/src/com/blogpost/hiro99ma/nfc/FelicaLite.java

static classだ。
どうせ同時に扱うNFCタグはたかだか1つなので、もういいだろうと思ったのである。
毎回引数でTagをもらうようにすればいいけど、それはそれでめんどうなので、最初にもらったら終わるまでFelicaLite内で保持するようにしている。

 

気にしているのは、この「保持する」のところ。
static classだから、保持するのもstatic。
明示的に忘れさせてもらわないといかんのだ。
自分で作ってる分にはそれでもいいけど、なんか他にいい手段はなかろうか。
enableForegroundDispatch()なんかも、同じといえば同じなので、もうメソッドのコメントでやーやー言うしかないのかね。

C++だと、スコープ外になるときにデストラクタが呼ばれるから、そのしくみを使うようにしてもらえばいいのだけど、これも結局はメンバ変数なんかで保持されたら同じなのだ。
Cでやってるとそれが普通なので、使う側の責任にはなる(そして忘れてバグる)のだけど、それだったらそもそもそういう実装をした方が悪い、という考え方もある(まあ、メモリが足りなくてそうせざるをえんことも多いのだが)。

Androidはメモリが多いんだから、static classとかしないでインスタンスをばしばし作ればいいやん、という気もするのだが、やっぱりもったいないという気もしてしまう。

うーん、悩ましいですわ。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。