有没有办法访问匿名类中定义的变量 示例:
class someClass{
returntype someMethod(){
Thread t = new Thread(new Runnable() {
ANrequest request;
ANresponse response;
@Override
public void run() {
request = somerequest.build();
response = request.executeForObjectList(Myclass.class);
}
});
t.start();
t.join();
if (this)
return response.isSucces();
else
return request.something();
}
}
我发现我可以定义实例变量并在匿名类中使用它们 - >但我不想这样做
class someClass{
ANrequest request;
ANresponse response;
returntype someMethod(){
Thread t = new Thread(new Runnable() {
@Override
public void run() {
request = somerequest.build();
response = request.executeForObjectList(Myclass.class);
}
});
t.start();
t.join();
if (this)
return response.isSucces();
else
return request.something();
}
}
或者我们可以在方法中创建最后一个元素数组,然后使用其字段来传递结果,我认为这是一种不好的做法。
class someClass{
ANrequest request;
ANresponse response;
returntype someMethod(){
Thread t = new Thread(new Runnable() {
final ANrequest request[]=new Anrequest[1];
final ANresponse response[]=new Anresponse[1];
@Override
public void run() {
request[0] = somerequest.build();
response[1] = request.executeForObjectList(Myclass.class);
}
});
t.start();
t.join();
if (this)
return response[0].isSucces();
else
return request[1].something();
}
}
所以我的问题是:是否有办法在匿名类中定义变量,然后访问它们:
类似这样的:
Runnable r= new Runnable () {
ANrequest request;
ANresponse response;
@Override
public void run() {
request = somerequest.build();
response = request.executeForObjectList(Myclass.class);
}
};
后来:
r.response
或 r.request
我今天才了解到这一点,但是如果您在声明匿名类时使用
var
而不是 Runnable
,您将能够访问它的字段(即使它们看起来是私有的)。
var r = new Runnable () {
ANrequest request;
ANresponse response;
@Override
public void run() {
request = somerequest.build();
response = request.executeForObjectList(Myclass.class);
}
};
System.out.println(r.request)
System.out.println(r.response)