blog

Gradleソースコード読み込み関連

2.依存関係の下にある関連するaarを取得 3....

Feb 14, 2020 · 2 min. read
シェア
NamedDomainObjectContainer

から

class MyTestDomainObj {
 //name属性は必ず定義し、初期化後は変更しないこと。
 String name
 String arr
 public MyTestDomainObj(String name) {
 this.name = name
 }
 void myArr(String arr) {
 this.arr = arr
 }
 String toString() {
 return "name = ${name}, arr = ${arr}"
 }
}
//拡張を作成する
class TestExtension {
 //NamedDomainObjectContainer プロパティを定義する。
 NamedDomainObjectContainer<TestDomainObj> testDomains
 
 public TestExtension(Project project) {
 //プロジェクトを渡す.container(...) メソッドは NamedDomainObjectContainer を作成する。
 NamedDomainObjectContainer<TestDomainObj> domainObjs = project.container(TestDomainObj)
 testDomains = domainObjs
 }
 //をGradle DSL構文に対応させる
 void testDomain(Action<NamedDomainObjectContainer<TestDomainObj>> action) {
 action.execute(testDomains)
 }
 void test() {
 //指定されたドメイン・オブジェクト・コンテナを繰り返し処理し、すべてのドメイン・オブジェクトの値を出力する。
 testDomains.all { data ->
 println data
 }
 }
}
//testという名前のExtensionを作成する
def testExt = getExtensions().create("test", TestExtension, project)
test {
 testDomain {
 domain2 {
 msg "This is domain2"
 }
 domain1 {
 msg "This is domain1"
 }
 domain3 {
 msg "This is domain3"
 }
 } 
}
task myTask << {
 testExt.test()
}
依存関係にある実装関連のaarを取得します。
task getPrintln(name: "getManifest", group: "asm") {
 doLast {
 //実装を出力する
 configurations.all { item ->
 if (item.name == "implementation"){
 item.getDependencies().all{data ->
 if (data instanceof ProjectDependency){
 println "------------" + data.dependencyProject.name
 }else if (data instanceof Dependency){
 def str = "------------" + data.getGroup() 
 		+ ":" + data.getName() 
 		+ ":" + data.getVersion()
 println str
 }else{
 println data.getClass().getName();
 }
 }
 }
 }
 }
}
ImmutableMap
//ImmutableMapを作成する:
Map<String,Object> immutableMap = new ImmutableMap.Builder<String,Object>().build();
//作成時に値を配置する。
Map<String,Object> immutableMap = new ImmutableMap.Builder<String,Object>()
 .put("k1","v1")
 .put("k2","v2")
 .build();
//作成後は変更できない。
immutableMap.put("k1","v3");//をスローする。.lang.UnsupportedOperationException
ImmutableMapImmutableMapのkeyとvalueはNULLにすることはできず、NULL値を入れるとNPEを投げる。
ImmutableMapを使用する:
 
決定論的な設定、例えば、異なるキー値に対して異なるリクエストURLを指定する。
ユニットテストを書く
 
key, value未知のパラメーターの場合、nullの場合がある。
Read next

メモリー・リーク?あなたはやられたことがある?

ガベージコレクタは、定期的にルートから開始し、ルートから参照されているオブジェクトをすべて見つけ、そのオブジェクトから参照されているオブジェクトを見つけます。その他のオブジェクトは、ガベージコレクションが開始されると削除され、対応するメモリ領域が解放されます。 これはもう使われません。 ...

Feb 14, 2020 · 7 min read