今天我想写一篇日志,上一篇技术日志,是纪念我会使用接口和泛型,这一次是为了纪念,我学会使用反射。
接口一般都和工厂相挂钩,但是工厂写多了,每次接口实例化对象时,都感觉有些弱智,有时甚至还想吐。
怎么解决这个问题呢?有什么办法呢,带着这样的思考,我开始留心ioc,ioc很有意思,他也是使用工厂生成对象。生成不同对象的参数有两种,一种是xml文件,配置类的包名,使用Class生成。另一种使用注解,使用注解获取配置类的包名,连字符串都不用写,真的是干的漂亮。
好,定个小目标----使用注解标签作为方法参数,给方法使用。我是针对SP文件,注解如下:
为了用户方便操作,就好比你娶老婆,你说”我要漂亮的”,媒婆回答“你的身高要求是什么,皮肤需要白吗,脸型是什么样子呢,她睡觉打呼你在不在乎呢……”,此时此刻,你只想一巴掌呼死她,跟我BB那么多干嘛,你给我就是了。所以,程序调用一定要简单,媒婆累死那是媒婆的事。
我需要干的事:
我很简单,只需要写好接口,配置它的注解就可以了。
package com.example.administrator.pushinfosystem.sharp.factory;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class SpProxy implements InvocationHandler {
private SharedPrefer sharedPrefer;
SpProxy(SharedPrefer sharedPrefer)
{
this.sharedPrefer=sharedPrefer;
}
final String tag=getClass().getName();
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
boolean isGet = method.getName().contains("get");
if(isGet)
{
SharpKey sharpKey = method.getAnnotation(SharpKey.class);
String key = sharpKey.key();
Class type = sharpKey.type();
if(type==int.class)
{
int defInt = sharpKey.intValue();
return sharedPrefer.getInt(key,defInt);
}
if(type==long.class)
{
Long defLong=sharpKey.longValue();
return sharedPrefer.getLong(key,defLong);
}
if(type==String.class)
{
String defStr=sharpKey.strValue();
return sharedPrefer.getStr(key,defStr);
}
if(type==float.class)
{
Float defFloat= sharpKey.floatValue();
return sharedPrefer.getFloat(key,defFloat);
}
}
boolean isSet=method.getName().contains("set");
if(isSet)
{
SharpKey sharpKey = method.getAnnotation(SharpKey.class);
String key = sharpKey.key();
Class type = sharpKey.type();
Object arg = args[0];
System.out.println("key:"+key+" type:"+type);
if(type==int.class)
{
sharedPrefer.putInt(key, (Integer) arg);
}
if(type==long.class)
{
sharedPrefer.putLong(key, (Long) arg);
}
if(type==String.class)
{
sharedPrefer.putStr(key, (String) arg);
}
if(type==float.class)
{
sharedPrefer.putFloat(key, (Float) arg);
}
}
return null;
}
}
ε=(´ο`*)))唉,媒婆就可怜了。
媒婆的实现:
//媒婆的神器,遮住唇角大痔的如意芭蕉扇
package com.example.administrator.pushinfosystem.sharp.factory;
import android.content.Context;
import android.content.SharedPreferences;
public class SharedPrefer {
SharedPreferences sp =null;
SharedPrefer(String name, Context context)
{
sp = context.getSharedPreferences(name, Context.MODE_PRIVATE);
}
void putInt(String key,int value)
{
sp.edit().putInt(key,value).commit();
}
int getInt(String key,int def)
{
return sp.getInt(key,def);
}
void putBoolean(String key,boolean value)
{
sp.edit().putBoolean(key,value).commit();
}
Boolean getBoolean(String key,boolean def)
{
boolean value = sp.getBoolean(key,def);
return value;
}
void putFloat(String key,float value)
{
sp.edit().putFloat(key,value).commit();
}
Float getFloat(String key,float def)
{
float value = sp.getFloat(key,def);
return value;
}
void putLong(String key,Long value)
{
sp.edit().putLong(key,value).commit();
}
Long getLong(String key,Long def)
{
Long value=sp.getLong(key,def);
return value;
}
void putStr(String key,String value)
{
sp.edit().putString(key,value).commit();
}
String getStr(String key,String def)
{
String str = sp.getString(key,def);
return str;
}
}
如意如意,趁我心意,变…… 嘭的一身,一个身材婀娜,长发飘飘的妹子就出来了
传送门 https://download.youkuaiyun.com/download/qq_30776389/10803704