当我运行此任务时:
task tmpTask << {
project.properties.each {println " $it"}
}
Run Code Online (Sandbox Code Playgroud)
我知道了:
org.gradle.java.home=/usr/lib/jvm/java-6-oracle
Run Code Online (Sandbox Code Playgroud)
但是如何使用这个变量呢?我试过了两个:
task tmpTask << {
println org.gradle.java.home
println project.properties.org.gradle.java.home
}
Run Code Online (Sandbox Code Playgroud)
但这一切都不起作用.首次打印出错:
Could not find property 'org' on task ':tmpTask'.
Run Code Online (Sandbox Code Playgroud)
而第二个失败的是:
Cannot get property 'gradle' on null object
Run Code Online (Sandbox Code Playgroud) 我很擅长gradle和groovy.这是我生成JNI标头的任务:
apply plugin: 'java'
apply plugin: 'application'
mainClassName = "com.my.example.HelloG"
task GenerateJniHeaders(dependsOn: 'classes') << {
def classpath = "build/classes/main"
def nativeIncludes = "src/native/include"
"javah -d ${nativeIncludes} -classpath ${classpath} ${mainClassName}".execute()
}
classes.finalizedBy GenerateJniHeaders
build.dependsOn GenerateJniHeaders
Run Code Online (Sandbox Code Playgroud)
它工作正常,但我觉得它有点难看.我怎样才能改进它?我感谢任何建议,特别是那些帮我删除硬编码的变量的建议.我还想使这个任务更通用 - 现在它只为主类生成JNI头,但我想为所有java文件运行它.此外,当此任务失败时(例如,类路径错误),它不会打印任何错误消息并构建成功,这会产生误导.
我有这样的事情:
wifiNetworks = (ArrayList<ScanResult>) mWifiManager.getScanResults();
Run Code Online (Sandbox Code Playgroud)
现在我可以简单地获得wifi SSID:
wifiNetworks.get(0).SSID
Run Code Online (Sandbox Code Playgroud)
我不知道网络是WEP,WPA,它是否有密码,所以我只想创建一个Intent,把SSID或ScanResult放到设置或任何地方,以便让用户输入密码和连接到该网络.可能吗?如果没有,获取网络类型信息并以编程方式连接的最简单方法是什么?
我们假设我有一个有效的Java FileDescriptor
,我用这种方式:
FileInputStream is = new FileInputStream("/some/path/to/file.txt");
FileDescriptor fd = is.getFD();
Run Code Online (Sandbox Code Playgroud)
现在请忘记我知道文件路径.我唯一拥有的是一个FileDescriptor
.有没有一种简单的方法来了解文件大小?现在我检查过:
FileDescriptor
有valid()
方法可以告诉我它是否有效但没有length()
或size()
功能.FileInputStream
不返回路径,因为它是一个流,它显然不会告诉我文件大小.File
(http://docs.oracle.com/javase/7/docs/api/java/io/File.html)其中有length()
方法没有能够处理FileDescriptor的构造函数.我知道我可以阅读整个流并总结长度,但我不认为它是简单的方法.
使用clang(版本3.0-6ubuntu3)编译此代码时:
constexpr int foo(const int n) {
return n + 1;
}
int main(void) {
constexpr int x = 5 * 4 + 12 + 8;
constexpr int y = foo(x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用此命令:
clang -std=c++11 -c constexprExample.cpp
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
错误:constexpr变量'y'必须由常量表达式初始化
代码或编译器有问题吗?
我认为这个问题肯定是在某个地方被问到的,但是当我寻找它时,我很遗憾地只找到了不同的主题.无论如何这里是代码:
public class A {
Object lockX = new Object();
Object lockY = new Object();
Object lockZ = new Object();
int c1;
int c2;
public void foo1() {
synchronized(lockX) {
c1++;
}
}
public void bar1() {
synchronized(lockY) {
c1++;
}
}
public void foo2() {
synchronized(lockZ) {
c2++;
}
}
public void bar2() {
synchronized(this) {
c2++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
基本上foo1和bar1不正确.它们使用不同的锁来保护c1,因此事实上c1将不受保护,并且这两个函数可以同时运行.然而我的问题是关于foo2和bar2.他们还好吗?它们也使用不同的锁,但是bar2锁定了整个对象,所以它是否可以防止同时修改c2?