访问匿名类的变量

问题描述 投票:0回答:1

有没有办法访问匿名类中定义的变量 示例:

    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

java java-threads anonymous-class
1个回答
0
投票

我今天才了解到这一点,但是如果您在声明匿名类时使用

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)
© www.soinside.com 2019 - 2024. All rights reserved.