Я недавно наткнулся на rxjava-файл , это расширение RxJava . В отличие от других решений, это использует NIO от Java.
import rx.Observable;
import rx.functions.Action1;
import com.github.davidmoten.rx.FileObservable;
// ... class definition omitted
public void tailLogFile() throws InterruptedException {
Observable tailer = FileObservable.tailer()
.file("application.log") // absolute path
.tailText();
tailer.subscribe(
new Action1() {
@Override
public void call(String line) {
System.out.println("you got line: " + line);
}
},
new Action1() {
@Override
public void call(Throwable e) {
System.out.println("you got error: " + e);
e.printStackTrace();
}
}
);
// this solution operates threaded, so something
// is required that prevents premature termination
Thread.sleep(120000);
}
Невозможно, но вы можете:
float f;
int i;
for (i = 0,f = 0.0; i < 5; i++)
{
//...
}
Или явно ограничить область действия f
и i
с помощью дополнительных скобок:
{
float f;
int i;
for (i = 0,f = 0.0; i < 5; i++)
{
//...
}
}
Также Вы могли использовать как ниже в C++.
int j=3;
int i=2;
for (; i<n && j<n ; j=j+2, i=i+2){
// your code
}
Нет, но технически есть обходной путь (не то чтобы я действительно использовал его, если только не принудительно):
for(struct { int a; char b; } s = { 0, 'a' } ; s.a < 5 ; ++s.a)
{
std::cout << s.a << " " << s.b << std::endl;
}
Вы не можете объявить несколько типов при инициализации, но можете назначить несколько типов, например:
{
int i;
char x;
for(i = 0, x = 'p'; ...){
...
}
}
Просто объявите их в их собственном объеме.