Java 常用套路(持續(xù)更新)

灌水文章只搁,勿噴扫尖。實例中的代碼有的直接來源于網(wǎng)上斗躏,已經(jīng)忘了從哪里摘抄過來了层释。囧~~~~~~

訪問私有變量

field.setAccessible(true);
BlockingQueue<EmailObj> quue =  (BlockingQueue<EmailObj>)field.get(emailManager);
EmailObj emailObj = quue.take();

反射修改類方法權(quán)限

Method method = DeployTask.class.getDeclaredMethod("getDeployHosts", SubTask.class);
method.setAccessible(true);
String deployHost = (String) method.invoke(deployTask, subTask);
Assert.assertEquals(deployHost, host + Constants.SPLIT_FLAG + "0");

Jackson 數(shù)據(jù)反射

反射為 HashMap 類型

TypeFactory typeFactory = mapper.getTypeFactory();
MapType mapType = typeFactory.constructMapType(HashMap.class, String.class, Theme.class);
HashMap<String, Theme> map = mapper.readValue(json, mapType);

同樣的截驮,我們應(yīng)該可以使用 Jackson 提供相關(guān)類對例如 LinkedList笑陈,Set 這些集合類型進行反射。具體請見 Deserializing into a HashMap of custom objects with jackson

讀取classes目錄下的文件

File file = new File(loader.getResource("admin.pub").getFile());

將 stacktrace 輸出到日志文件

StringWriter trace = new StringWriter();
e.printStackTrace(new PrintWriter(trace));
logger.error(trace.toString());

格式化時間

new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()

讀取InputStream里面的內(nèi)容

使用Apache commons IOUtils類葵袭,下面這些方法的限制是指針對本地文件涵妥,對于TCP的input stream并不適用。

StringWriter writer = new StringWriter();
IOUtils.copy(inputStream, writer, encoding);
String theString = writer.toString();

// 更加雞賊的寫法是
String theString = IOUtils.toString(inputStream, encoding);

// 對于Spring用戶坡锡,可以使用如下的代碼
import java.nio.charset.StandardCharsets;
import org.springframework.util.FileCopyUtils;

public String convertStreamToString(InputStream is) throws IOException { 
    return new String(FileCopyUtils.copyToByteArray(is), StandardCharsets.UTF_8);
}

long to timesptamp

long time = System.currentMilliseconds();
new Timestamp(time);

發(fā)送Http請求

GET
public static String httpGet(String requestUrl, Map<String, String> headers) throws IOException {
    HttpClient client = new DefaultHttpClient();
    HttpGet get = new HttpGet(requestUrl);

    for (String key: headers.keySet()) {
        get.setHeader(key, headers.get(key));
    }

    HttpResponse responseGet = client.execute(get);
    HttpEntity resEntityGet = responseGet.getEntity();

    return EntityUtils.toString(resEntityGet);
}
POST
public static String postJson(String address, Map<String, String> headers) {
    try {
        URL url = new URL(address);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("POST");
        return IOUtils.toString(connection.getInputStream(), "UTF-8");
    } catch (MalformedURLException e) {
        logger.error("address: " + address, e);
    } catch (IOException e) {
        logger.error("address: " + address, e);
    }
    
    return null;
}

log4j

限制 log4j debug 范圍:

log4j.logger.com.datastory.ops.resource=DEBUG, DRFA, CONSOLE

數(shù)據(jù)結(jié)構(gòu)

一行代碼初始化 List
List<String> places = Arrays.asList("Buenos Aires", "Córdoba", "La Plata");
一行代碼初始化 Map
ImmutableMap.of("cookie", RConfig.getInstance().get(RConstant.DEPLOY_TOKEN))

Gson

如何序列化/反序列化 abstract class

先創(chuàng)建一個 adapter 序列化 abstract class蓬网,在本例子中, adapter 里面調(diào)用了 Result 的 serialize 方法鹉勒,將 Result 序列化帆锋。

import com.google.gson.*;

import java.lang.reflect.Type;

/**
 * Created by zhuohui on 17/6/26.
 */
public class ResultAdapter implements JsonSerializer, JsonDeserializer {
    public JsonElement serialize(Object src, Type typeOfSrc, JsonSerializationContext context) {
        JsonObject jsonObject = new JsonObject();
        Result result = (Result) src;
        result.serialize(jsonObject);
        return jsonObject;
    }

    @Override
    public Object deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        JsonObject object = json.getAsJsonObject();
        String type = object.get("type").getAsString();
        Result output = ResultFactory.createResult(type);
        output.deserialize(object);
        return output;
    }
}

然后在創(chuàng)建 Gson 對象之前,注冊 Result.class 的 adapter禽额,注意使用 registerTypeHierarchyAdapter 方法锯厢,才能夠?qū)?Result.class 的所有子類生效

new GsonBuilder()
    .registerTypeHierarchyAdapter(Result.class, new ResultAdapter())
    .create()
    .toJson(report)
如何反序列話 List of objects
Type listType = new TypeToken<List<GraphHistory>>(){}.getType();
List<GraphHistory> histories = new Gson().fromJson(json, listType);

單例

靜態(tài)內(nèi)部類實現(xiàn)的單例:

public class Singleton {  
    private static class SingletonHolder {  
        private static final Singleton INSTANCE = new Singleton();  
    }  
    private Singleton (){}  
    public static final Singleton getInstance() {  
        return SingletonHolder.INSTANCE; 
    }  
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市脯倒,隨后出現(xiàn)的幾起案子实辑,更是在濱河造成了極大的恐慌,老刑警劉巖盔憨,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件徙菠,死亡現(xiàn)場離奇詭異,居然都是意外死亡郁岩,警方通過查閱死者的電腦和手機婿奔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來问慎,“玉大人萍摊,你說我怎么就攤上這事∪绲穑” “怎么了冰木?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長笼恰。 經(jīng)常有香客問我踊沸,道長,這世上最難降的妖魔是什么社证? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任逼龟,我火速辦了婚禮,結(jié)果婚禮上追葡,老公的妹妹穿的比我還像新娘腺律。我一直安慰自己奕短,他們只是感情好,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布匀钧。 她就那樣靜靜地躺著翎碑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪之斯。 梳的紋絲不亂的頭發(fā)上日杈,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機與錄音吊圾,去河邊找鬼达椰。 笑死,一個胖子當著我的面吹牛项乒,可吹牛的內(nèi)容都是我干的啰劲。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼檀何,長吁一口氣:“原來是場噩夢啊……” “哼蝇裤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起频鉴,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤栓辜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后垛孔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體藕甩,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年周荐,在試婚紗的時候發(fā)現(xiàn)自己被綠了狭莱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡概作,死狀恐怖腋妙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情讯榕,我是刑警寧澤骤素,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站愚屁,受9級特大地震影響济竹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜霎槐,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一送浊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧栽燕,春花似錦罕袋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蔼啦,卻和暖如春榆纽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背捏肢。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工奈籽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鸵赫。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓衣屏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親辩棒。 傳聞我的和親對象是個殘疾皇子狼忱,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

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

  • 對象的創(chuàng)建與銷毀 Item 1: 使用static工廠方法,而不是構(gòu)造函數(shù)創(chuàng)建對象:僅僅是創(chuàng)建對象的方法一睁,并非Fa...
    孫小磊閱讀 1,969評論 0 3
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法钻弄,類相關(guān)的語法,內(nèi)部類的語法者吁,繼承相關(guān)的語法窘俺,異常的語法,線程的語...
    子非魚_t_閱讀 31,603評論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理复凳,服務(wù)發(fā)現(xiàn)瘤泪,斷路器,智...
    卡卡羅2017閱讀 134,639評論 18 139
  • 多態(tài) 任何域的訪問操作都將有編譯器解析染坯,如果某個方法是靜態(tài)的均芽,它的行為就不具有多態(tài)性 java默認對象的銷毀順序與...
    yueyue_projects閱讀 936評論 0 1
  • 我把石頭扔進了霓虹燈下的溝渠 溝渠里的紅紅綠綠被砸成了碎片 日出的時候所有的霓虹燈光都消失了 沒有人知道我在溝渠邊...
    留子堯閱讀 212評論 2 8