私はActionscript3の背景から来て、これは初めての私の人生でJavaを書くことです。ハッシュテーブルはFlashの辞書と似ているようですが、正しく使用していますか?私は、Hashtableは文字列をキーとして受け入れ、Typefaceはオブジェクトとして受け入れると考えています。これは正しいです?このようなものに適している別のCollectionサブクラスはありますか?是非、n00b Javaを裂けてください。私はこれを学ぶ必要があります。Hashtableは資産を格納するのに適していますか?
package com.typeoneerror.apps.app_name.utils;
import android.content.Context;
import android.graphics.Typeface;
import java.util.Hashtable;
public class FontRegistry
{
private static FontRegistry _instance;
private Context _context;
private Hashtable<String, Typeface> _fonts;
private FontRegistry()
{
_fonts = new Hashtable<String, Typeface>();
}
public static FontRegistry getInstance()
{
if (_instance == null)
{
_instance = new FontRegistry();
}
return _instance;
}
public void init(Context context)
{
_context = context;
}
public Typeface getTypeface(int resourceId)
{
String fontName = _context.getResources().getString(resourceId);
if (!_fonts.containsKey(fontName))
{
String fontPath = "fonts/" + fontName;
Typeface typeface = Typeface.createFromAsset(_context.getAssets(), fontPath);
_fonts.put(fontName, typeface);
}
return (Typeface)_fonts.get(fontName);
}
}
rfeakが言ったことを除いて、それは問題ありません。いくつかのヒント:アンダースコアを除外(してください)すると、 'this.context = context'が必要です。 'private final Map fonts = new HashMap ()'のようなフォントを初期化することができます。並行性がある場合は、あなたの怠惰なシングルトンに問題が発生する可能性があります。警告をオンにすると、あなたの最後のキャストは必ず不要です。 –
maaartinus
このクラスへのアクセスはシングルスレッドでもマルチスレッドでもかまいませんか?私は 'getInstance()'のあなたの現在の実装がスレッドセーフではないので尋ねます。 –
@ dave.c私は分かりません。私が言ったように、これは私の初めてのJavaを書くので、答えとしての任意のアドバイスは非常に高く評価されるだろう。 – typeoneerror