/**
* 将方法和其他参数封装成对象
*/
public class MethodManager {
//参数类型
private Class> mType;
//网络类型
private NetType mNetType;
//方法
private Method mMethod;
public MethodManager(Class> type, NetType netType, Method method) {
mType = type;
mNetType = netType;
mMethod = method;
}
public Class> getType() {
return mType;
}
public void setType(Class> type) {
mType = type;
}
public NetType getNetType() {
return mNetType;
}
public void setNetType(NetType netType) {
mNetType = netType;
}
public Method getMethod() {
return mMethod;
}
public void setMethod(Method method) {
mMethod = method;
}
}
Constants
/**
* 常量类
*/
public class Constants {
public static final String LOG_TAG = "network_monitor_tag";
public static final String ANDROID_NET_CHANGE_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
//跳转设置回调请求码
public static final int SETTING_REQUEST_CODE = 123;
}
NetworkUtils
/**
* 网络工具类
*/
public class NetworkUtils {
/**
* 网络是否可用
*
* @return
*/
@SuppressLint("MissingPermission")
public static boolean isNetworkAvailable() {
ConnectivityManager manager = (ConnectivityManager) NetworkManager.getDefault().getApplication()
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (null == manager) {
return false;
}
NetworkInfo[] infos = manager.getAllNetworkInfo();
if (null != infos) {
for (NetworkInfo info : infos) {
if (info.getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
return false;
}
/**
* 获取网络类型
*
* @return
*/
@SuppressLint("MissingPermission")
public static NetType getNetType() {
ConnectivityManager manager = (ConnectivityManager) NetworkManager.getDefault().getApplication()
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (null == manager) {
return NetType.NONE;
}
NetworkInfo info = manager.getActiveNetworkInfo();
if (null == info) {
return NetType.NONE;
}
int nType = info.getType();
if (nType == ConnectivityManager.TYPE_MOBILE) {
if (info.getExtraInfo().toLowerCase().equals("cmnet")) {
return NetType.CMNET;
} else {
return NetType.CMWAP;
}
} else if (nType == ConnectivityManager.TYPE_WIFI) {
return NetType.WIFI;
}
return NetType.NONE;
}
/**
* 打开网络设置界面
*/
public static void openSettings(Context context, int requestCode) {
Intent intent = new Intent("/");
ComponentName cn = new ComponentName("com.android.settings",
"com.android.settings.WirelessSettings");
intent.setComponent(cn);
intent.setAction("android.intent.action.VIEW");
((Activity) context).startActivityForResult(intent, requestCode);
}
}
BaseUtils
/**
* 基层代码,无需细看
*/
public class BaseUtils {
/**
* 推送(遍历并执行方法集)
*/
public static void post(NetType netType, Map
NetStateReceiver
/**
* 广播接收器
*/
public class NetStateReceiver extends BroadcastReceiver {
private NetType mNetType;
private Map> mNetworkList;
public NetStateReceiver() {
//初始化为无网络
mNetType = NetType.NONE;
mNetworkList = new HashMap<>();
}
@Override
public void onReceive(Context context, Intent intent) {
if (null != intent && null != intent.getAction()) {
if (intent.getAction().equalsIgnoreCase(Constants.ANDROID_NET_CHANGE_ACTION)) {
Log.d(Constants.LOG_TAG, "network change");
mNetType = NetworkUtils.getNetType();
if (NetworkUtils.isNetworkAvailable()) {
Log.d(Constants.LOG_TAG, "network connect");
} else {
Log.d(Constants.LOG_TAG, "network disconnect");
}
BaseUtils.post(mNetType, mNetworkList);
}
}
}
/**
* 页面注册
*
* @param object 可以是activity、fragment
*/
public void registerObserver(Object object) {
List methodList = mNetworkList.get(object);
if (methodList == null) {
methodList = BaseUtils.findAnnotationMethod(object);
mNetworkList.put(object, methodList);
}
}
/**
* 页面注销网络监听
*
* @param object
*/
public void unRegisterObserver(Object object) {
if (!mNetworkList.isEmpty()) {
mNetworkList.remove(object);
}
}
/**
* 注销所有页面的网络监听,一般用于首页
*/
public void unRegisterAllObserver() {
if (!mNetworkList.isEmpty()) {
mNetworkList.clear();
}
NetworkManager.getDefault().getApplication().unregisterReceiver(this);
}
}
Context Bound,上下文界定,是Scala为隐式参数引入的一种语法糖,使得隐式转换的编码更加简洁。
隐式参数
首先引入一个泛型函数max,用于取a和b的最大值
def max[T](a: T, b: T) = {
if (a > b) a else b
}
因为T是未知类型,只有运行时才会代入真正的类型,因此调用a >
最近用到企业通讯录,虽然以前也开发过,但是用的是jsf,拼成的树形,及其笨重和难维护。后来就想到直接生成json格式字符串,页面上也好展现。
// 首先取出每个部门的联系人
for (int i = 0; i < depList.size(); i++) {
List<Contacts> list = getContactList(depList.get(i
servlet3.0以后支持异步处理请求,具体是使用AsyncContext ,包装httpservletRequest以及httpservletResponse具有异步的功能,
final AsyncContext ac = request.startAsync(request, response);
ac.s
甲说:
A B两个表总数据量都很大,在百万以上。
idx1 idx2字段表示是索引字段
A B 两表上都有
col1字段表示普通字段
select xxx from A
where A.idx1 between mmm and nnn
and exists (select 1 from B where B.idx2 =
@Repository、@Service、@Controller 和 @Component 将类标识为Bean
Spring 自 2.0 版本开始,陆续引入了一些注解用于简化 Spring 的开发。@Repository注解便属于最先引入的一批,它用于将数据访问层 (DAO 层 ) 的类标识为 Spring Bean。具体只需将该注解标注在 DAO类上即可。同时,为了让 Spring 能够扫描类
先看一下下面的错误代码,对写加了synchronized控制,保证了写的安全,但是问题在哪里呢?
public class testTh7 {
private String data;
public String read(){
System.out.println(Thread.currentThread().getName() + "read data "
网上已经有一大堆的设置步骤的了,根据我遇到的问题,整理一下,如下:
首先先去下载一个mongodb最新版,目前最新版应该是2.6
cd /usr/local/bin
wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.0.tgz
tar -zxvf mongodb-linux-x86_64-2.6.0.t
1.rust里绑定变量是let,默认绑定了的变量是不可更改的,所以如果想让变量可变就要加上mut。
let x = 1; let mut y = 2;
2.match 相当于erlang中的case,但是case的每一项后都是分号,但是rust的match却是逗号。
3.match 的每一项最后都要加逗号,但是最后一项不加也不会报错,所有结尾加逗号的用法都是类似。
4.每个语句结尾都要加分