Kotlin轉(zhuǎn)Java記錄

昨天寫了一篇PermissionsDispatcher初探为居,文章最后說要用java重寫processor模塊,今天花了半天時間完成吆玖,現(xiàn)在把代碼放在github上:https://github.com/ileelay/PermissionsDispatcher/tree/2.2.0j怠噪,歡迎大家糾正嗜憔!同時感慨到Kotlin太強大木缝,Java太繁瑣;
雖然Kotlin語法很簡練围辙,終究還是基于JVM我碟,同時這篇文章不是循序漸進的Kotlin語法講解,只是為了記錄在轉(zhuǎn)PermissionsDispatcher時的粗略見解姚建;

普通class

kotlin是這樣子寫的

class NoParametersAllowedException(e: ExecutableElement) : RuntimeException("Method '${e.simpleString()}()' must not have any parameters")

為了保持參數(shù)一致矫俺,我用java是這樣寫的:

public class NoParametersAllowedException extends RuntimeException {

    public static RuntimeException getInstance(ExecutableElement e) {

        return new NoParametersAllowedException("Method "+e.getSimpleName().toString()+" must not have any parameters");
    }

    private NoParametersAllowedException(String s) {
        super(s);
    }
}

常量的定義

kotlin這樣

//Constants.kt
val FILE_COMMENT = "This file was generated by PermissionsDispatcher. Do not modify!"
val GEN_CLASS_SUFFIX = "PermissionsDispatcher"
val GEN_REQUESTCODE_PREFIX = "REQUEST_"
val GEN_PERMISSION_PREFIX = "PERMISSION_"
val GEN_PENDING_PREFIX = "PENDING_"
val GEN_WITHCHECK_SUFFIX = "WithCheck"
val GEN_PERMISSIONREQUEST_SUFFIX = "PermissionRequest"

說實話,kotlin這樣寫好變態(tài)掸冤,連class關(guān)鍵字都不用聲明厘托,我用java也盡量保持簡潔,可還是比不過它稿湿;

public interface Constants {
    String FILE_COMMENT = "This file was generated by PermissionsDispatcher. Do not modify!";
    String GEN_CLASS_SUFFIX = "PermissionsDispatcher";
    String GEN_REQUESTCODE_PREFIX = "REQUEST_";
    String GEN_PERMISSION_PREFIX = "PERMISSION_";
    String GEN_PENDING_PREFIX = "PENDING_";
    String GEN_WITHCHECK_SUFFIX = "WithCheck";
    String GEN_PERMISSIONREQUEST_SUFFIX = "PermissionRequest";
}

Extensions

//Extensions.kt
fun TypeMirror.simpleString(): String {
    val toString: String = this.toString()
    val indexOfDot: Int = toString.lastIndexOf('.')
    return if (indexOfDot == -1) toString else toString.substring(indexOfDot + 1)
}

//調(diào)用
typeMirror.simpleString()

這個用java寫就比較尷尬了铅匹,我是用工具類,功能可以實現(xiàn)缎罢,但還是沒法保持統(tǒng)一的調(diào)用方式伊群;

//Extensions.java
public static String TypeMirrorSimpleString(TypeMirror typeMirror) {
        String toString = typeMirror.toString();
        int indexOfDot = toString.lastIndexOf('.');
        if (indexOfDot == -1)
            return toString;
        else
            return toString.substring(indexOfDot + 1);
    }

//調(diào)用
Extensions.TypeMirrorSimpleString(typeMirror);

初始化一個List

processorUnits = listOf(ActivityProcessorUnit(),SupportFragmentProcessorUnit(),NativeFragmentProcessorUnit())

用java咋寫,尷尬了

processorUnits = new ArrayList<ProcessorUnit>();
processorUnits.add(new ActivityProcessorUnit());
processorUnits.add(new SupportFragmentProcessorUnit());
processorUnits.add(new NativeFragmentProcessorUnit());

Safe Call (?. ?:)

先看這一段懵逼的代碼

//ADD_WITH_CHECK_BODY_MAP是一個HashMap
ADD_WITH_CHECK_BODY_MAP[needsPermissionParameter]?.addHasSelfPermissionsCondition(builder, activityVar, permissionField) ?: builder.beginControlFlow("if (\$T.hasSelfPermissions(\$N, \$N))", PERMISSION_UTILS, activityVar, permissionField)

用Java理解是啥樣子

SensitivePermissionInterface anInterface = ADD_WITH_CHECK_BODY_MAP.get(needsPermissionParameter);
if (anInterface != null) {
    anInterface.addHasSelfPermissionsCondition(builder, activityVar, permissionField);
} else {
       builder.beginControlFlow("if ($T.hasSelfPermissions($N, $N))", PERMISSION_UTILS, activityVar, permissionField);
}

未完待續(xù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末策精,一起剝皮案震驚了整個濱河市舰始,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌咽袜,老刑警劉巖丸卷,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異询刹,居然都是意外死亡谜嫉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門凹联,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沐兰,“玉大人,你說我怎么就攤上這事蔽挠∽〈常” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵澳淑,是天一觀的道長比原。 經(jīng)常有香客問我,道長杠巡,這世上最難降的妖魔是什么量窘? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮氢拥,結(jié)果婚禮上蚌铜,老公的妹妹穿的比我還像新娘锨侯。我一直安慰自己,他們只是感情好厘线,可當(dāng)我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布识腿。 她就那樣靜靜地躺著,像睡著了一般造壮。 火紅的嫁衣襯著肌膚如雪渡讼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天耳璧,我揣著相機與錄音成箫,去河邊找鬼。 笑死旨枯,一個胖子當(dāng)著我的面吹牛蹬昌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播攀隔,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼皂贩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了昆汹?” 一聲冷哼從身側(cè)響起明刷,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎满粗,沒想到半個月后辈末,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡映皆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年挤聘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捅彻。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡组去,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出步淹,到底是詐尸還是另有隱情添怔,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布贤旷,位于F島的核電站,受9級特大地震影響砾脑,放射性物質(zhì)發(fā)生泄漏幼驶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一韧衣、第九天 我趴在偏房一處隱蔽的房頂上張望盅藻。 院中可真熱鬧购桑,春花似錦、人聲如沸氏淑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽假残。三九已至缭贡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辉懒,已是汗流浹背阳惹。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留眶俩,地道東北人莹汤。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像颠印,于是被迫代替她去往敵國和親纲岭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,264評論 25 707
  • Kotlin is 100% interoperable with Java? and Android? 在前面的...
    JackChen1024閱讀 6,420評論 1 15
  • 前言 人生苦多线罕,快來 Kotlin 止潮,快速學(xué)習(xí)Kotlin! 什么是Kotlin闻坚? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,217評論 9 118
  • 成長就是習(xí)慣了遍體鱗傷——賞析《追風(fēng)箏的人》 《追風(fēng)箏的人》是美籍阿富汗作家卡勒德?胡賽尼的成名小說沽翔,講述了兩個阿...
    唐三葬閱讀 317評論 0 0
  • 花了兩天時間讀完了東野圭吾的解憂雜貨店,有感動有欣慰這是一本簡短溫情的小說窿凤。 讓我感觸最深的就是人物關(guān)系的關(guān)聯(lián)性仅偎,...
    儀琳閱讀 387評論 0 0