1.NamedDomainObjectContainer
来自 [www.jianshu.com/p/167cd4b82…]
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) {
//通过 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()
}
2. 获取dependencies下implementation相关的aar
task getPrintln(name: "getManifest", group: "asm") {
doLast {
//输出 implementation
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();
}
}
}
}
}
}
3. 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");//会抛出java.lang.UnsupportedOperationException
ImmutableMap中key和value均不能为null,放入null值会抛出NPE
ImmutableMap的使用场景:
适合
确定性的配置, 比如根据不同的key值得到不同的请求url
写单元测试
不适合
key, value为未知参数, 可能有null产生的情况