日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

class和getClass()的区别

發(fā)布時(shí)間:2024/1/18 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 class和getClass()的区别 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前幾天做項(xiàng)目,覺得自己都開發(fā)一年多了,還沒有自己封裝的類,感覺真是白做了,再加上,看到自己的代碼,我都不忍心看,有的時(shí)候,還需要自己去讀自己寫的代碼,亂亂糟糟的,實(shí)在不忍心看,沒辦法,重現(xiàn)在開始吧,把自己需要的,都封裝起來,用到什么的時(shí)候,在哪來用,方便,快捷

首先是自己封裝的基類baseActivity,不廢話,直接上代碼(其他的就不貼出來了,只有這個(gè)地方有錯(cuò)誤)

package com.demo.XXX.XX.base;import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.IBinder; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.EditText;import com.demo.XXX.XXX.tools.LogUtil; import com.demo.XXX.XXX.tools.ShareUtils;/*** Created by XXX on 2016/9/26.*/ public abstract class BaseActivity extends Activity {private String TAG;protected Context context;protected ShareUtils shareUtils;protected LayoutInflater inflater;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);context = this;inflater = LayoutInflater.from(context);TAG = getClass().getName();LogUtil.i("BaseActivity", TAG);shareUtils = new ShareUtils(context);}/*** 初始化控件或者數(shù)據(jù)*/protected abstract void initView();/*** 初始化點(diǎn)擊事件*/protected abstract void setListener();/*** 單一的activity的跳轉(zhuǎn)** @param mClass 跳轉(zhuǎn)的類*/public void start_activity(Class<?> mClass) {startActivity(new Intent(context, mClass.getClass()));}/*** 帶傳遞參數(shù)的跳轉(zhuǎn)** @param mClass 跳轉(zhuǎn)類* @param key 跳轉(zhuǎn)key值* @param value 跳轉(zhuǎn)value值*/public void start_activity(Class<?> mClass, String key, String value) {startActivity(new Intent(context, mClass).putExtra(key, value));}/*** 帶傳遞參數(shù)的跳轉(zhuǎn)** @param mClass 跳轉(zhuǎn)類* @param key 跳轉(zhuǎn)key值* @param value 跳轉(zhuǎn)value值*/public void start_activity(Class<?> mClass, String key, int value) {startActivity(new Intent(context, mClass).putExtra(key, value));}/*** 帶傳遞參數(shù)的跳轉(zhuǎn)** @param mClass 跳轉(zhuǎn)類* @param key 跳轉(zhuǎn)key值* @param value 跳轉(zhuǎn)value值*/public void start_activity(Class<?> mClass, String key, Bundle value) {startActivity(new Intent(context, mClass).putExtra(key, value));}/**** 點(diǎn)擊空白處 隱藏軟鍵盤* @param ev* @return*/@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {if (ev.getAction() == MotionEvent.ACTION_DOWN) {View v = getCurrentFocus();if (isShouldHideKeyboard(v, ev)) {hideKeyboard(v.getWindowToken());}}return super.dispatchTouchEvent(ev);}/*** 根據(jù)EditText所在坐標(biāo)和用戶點(diǎn)擊的坐標(biāo)相對(duì)比,來判斷是否隱藏鍵盤,因?yàn)楫?dāng)用戶點(diǎn)擊EditText時(shí)則不能隱藏** @param v* @param event* @return*/private boolean isShouldHideKeyboard(View v, MotionEvent event) {if (v != null && (v instanceof EditText)) {int[] l = {0, 0};v.getLocationInWindow(l);int left = l[0],top = l[1],bottom = top + v.getHeight(),right = left + v.getWidth();if (event.getX() > left && event.getX() < right&& event.getY() > top && event.getY() < bottom) {// 點(diǎn)擊EditText的事件,忽略它。return false;} else {return true;}}// 如果焦點(diǎn)不是EditText則忽略,這個(gè)發(fā)生在視圖剛繪制完,第一個(gè)焦點(diǎn)不在EditText上,和用戶用軌跡球選擇其他的焦點(diǎn)return false;}/*** 獲取InputMethodManager,隱藏軟鍵盤** @param token*/private void hideKeyboard(IBinder token) {if (token != null) {InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);}} }

原本以為自己封裝的不錯(cuò),挺滿意的,哈哈,我也有自己封裝的代碼了,以后在完善下,直接用這個(gè)框架做項(xiàng)目,那還不嗖嗖的,想想都覺得開森

開始在使用activity跳轉(zhuǎn)的時(shí)候,用的自己封裝好的start_activity方法,結(jié)果一盆涼水澆在了我的頭上,直接報(bào)錯(cuò)

android.content.ActivityNotFoundException: Unable to find explicit activity class {com.demo.neu/java.lang.Class}; have you declared this activity in your AndroidManifest.xml?

找不到這個(gè)類?我明明已經(jīng)在androidManifest里邊注冊(cè)了啊,為啥還提示找不到這個(gè)類,試試Google提供的startac方法,看看

竟然可以跳轉(zhuǎn),那為啥,我封裝的不能跳轉(zhuǎn)呢,也沒有啥問題啊,把a(bǔ)ndroidManifest里邊的那個(gè)類刪除,再次用Google的startactivity方法做跳轉(zhuǎn)看看,結(jié)果報(bào)錯(cuò)

android.content.ActivityNotFoundException: Unable to find explicit activity class {com.demo.XXX/com.demo.XXX.XXX. activity.LoginActivity}; have you declared this activity in your AndroidManifest.xml?咦,錯(cuò)誤竟然不一樣,好吧,那就不是類沒有注冊(cè)的問題了,再看看自己封裝的方法吧,仔細(xì)看的時(shí)候才發(fā)現(xiàn),原來問題出在這里

/*** 單一的activity的跳轉(zhuǎn)** @param mClass 跳轉(zhuǎn)的類*/public void start_activity(Class<?> mClass) {startActivity(new Intent(context, mClass.getClass()));}而下邊的封裝 /*** 帶傳遞參數(shù)的跳轉(zhuǎn)** @param mClass 跳轉(zhuǎn)類* @param key 跳轉(zhuǎn)key值* @param value 跳轉(zhuǎn)value值*/public void start_activity(Class<?> mClass, String key, String value) {startActivity(new Intent(context, mClass).putExtra(key, value));}在單一跳轉(zhuǎn)的哪里竟然使用了class.getClass(),去掉getClass(),運(yùn)行成功,可以跳轉(zhuǎn),那么問題來了,class和getClass()有啥區(qū)別呢,

細(xì)心的你可能發(fā)現(xiàn)了,問題就在這里

com.demo.neu/java.lang.Class和

com.demo.XXX/com.demo.XXX.XXX.activity.LoginActivity這就是問題所在了,前邊的報(bào)錯(cuò)是java里邊的long類型,因?yàn)樵趌ong類型里邊沒有l(wèi)oginActivity這個(gè)類,所以出現(xiàn)錯(cuò)誤,而后便是指定的一個(gè)具體的類,就是說沒有在androidMainfest里邊沒有注冊(cè)了

一個(gè)是類型里邊的類,一個(gè)是具體的activity的類,當(dāng)然錯(cuò)誤不一樣了,當(dāng)然出現(xiàn)問題了

我替你們踩坑了,以后封裝的小伙伴注意了,別再犯我這么低級(jí)的錯(cuò)誤了,唉


總結(jié)

以上是生活随笔為你收集整理的class和getClass()的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。