ListView を使用して JSON データを表示しており、そのタイプ (アーティスト、リリース、ラベルなど) に従って各結果を表示したいと考えています。
result の各タイプによって実装されるインターフェースを使用します。
public interface Result {
public Int getId();
public String getThumb();
// ...
}
これらの選択肢のどれが最善の解決策であるかを知りたいです (私はより良いものに対してオープンです。それが私の頭の上にあったものです):
- インターフェイスでを作成します(したがって、継承されたクラスは、メソッド
enum ResultType
のように独自の値を返す必要がありますResultType.ARTIST
getType()
- を使用してインスタンスタイプを確認する
isInstance()
if
多くの/else
ステートメントの使用を避けたいので、この C コード (関数ポインターの配列) に相当するものを実行する最善の方法を知りたいです。
typedef struct s_func {
const char *type_name;
void* (*func_pointer)(void *result_infos);
} t_func;
static t_func type_array[] = {
{"artist", artist_function},
{"label", label_function},
// ....
{NULL, NULL}
}
void check_type(const char *type_string)
{
int i, j = 0;
char *key_value;
// compare string and array key
while (type_array && type_array[i][0]) {
key_value = type_array[i][0];
// if key match
if (type_string && strncmp(type_string, key_value, strlen(type_string)) == 0) {
type_array[i][1](); // call appropriate function;
}
i++;
}
}
a を使用していると思いますHashMap
が (間違っているかもしれません)、リテラル表記はないようです。HashMap
のペアを構築する簡単な方法はありますか?
ありがとうございました