数据包管理,模板与运行时类型检查, K键值类型,V 获取的Value类型
public class DataPacakge<K> {
public ConcurrentHashMap<K, Object> mPackage;
public String getString(K key){
return get(key, String.class);
}
public ArrayList<String> getStringArrayList(K key){
return getArrayList(key, String.class);
}
public String[] getStringArrays(K key){
return getArrays(key, String.class);
}
public int getInt(K key){
return get(key, Integer.class);
}
public ArrayList<Integer> getIntArrayList(K key){
return getArrayList(key, Integer.class);
}
public Integer[] getIntegerArrays(K key){
return getArrays(key, Integer.class);
}
public float getFloat(K key){
return get(key, Float.class);
}
public ArrayList<Float> getFloatArrayList(K key){
return getArrayList(key, Float.class);
}
public Float[] getFloatArrays(K key){
return getArrays(key, Float.class);
}
public Bitmap getBitmap(K key){
return get(key, Bitmap.class);
}
public ArrayList<Bitmap> getBitmapArrayList(K key){
return getArrayList(key, Bitmap.class);
}
public Bitmap[] getBitmapArrays(K key){
return getArrays(key, Bitmap.class);
}
public <T> T get(K key, Class<T> clazz){
Object value = mPackage.get(key);
if(value!=null && clazz.isInstance(value)){
return clazz.cast(value);
}else {
CVLog.e(Constant.TAG, "Type mismatch or value not found for key: " + key);
return null;
}
}
public <T> ArrayList<T> getArrayList(K key, Class<T> clazz){
Object value = mPackage.get(key);
if (value instanceof ArrayList) {
ArrayList<?> array = (ArrayList<?>) value;
if (array.stream().allMatch(clazz::isInstance)) {
return (ArrayList<T>) value;
}
}
CVLog.e(Constant.TAG, "Type mismatch or value not found for key: " + key);
return null;
}
public <T> T[] getArrays(K key, Class<T> clazz){
Object value = mPackage.get(key);
if (value instanceof Object[]) {
Object[] array = (Object[]) value;
if (clazz.isInstance(array[0])) {
return (T[]) value;
}
}
CVLog.e(Constant.TAG, "Type mismatch or value not found for key: " + key);
return null;
}
private static class Singleton<K>{
public DataPacakge<K> INSTANCE = new DataPacakge();
}
}