标签: anonymous-class

Java反思:如何检索匿名内部类?

我在另一个类(SomeClass)中有一个匿名内部类。

双方SomeClass.class.getClasses()SomeClass.class.getDeclaredClasses()返回空数组。

我在ClassJavadocs中找不到关于此的一些提示。

可以使用反射以某种方式检索匿名内部类吗?

匿名内部类和普通内部类之间还有什么显着区别?

java reflection anonymous-class inner-classes

5
推荐指数
1
解决办法
3991
查看次数

为什么我不能在匿名类中使用<Class> .this?

我最近使用这个代码,并意识到在匿名类中,我无法通过.this访问该实例,如下所示:

Sprite sprFace = new Sprite() {

    @Override
    protected void onManagedUpdate(float pSecondElapsed) {
        runOnUpdateThread(new Runnable() {

        @Override
        protected void run() {    
            Sprite.this.getParent().detach(Sprite.this); // Here
        }});
    }

};
Run Code Online (Sandbox Code Playgroud)

我知道如何解决它(只是声明一个"我"变量),但我需要知道为什么我不能使用<Class>.this

java oop anonymous anonymous-class

5
推荐指数
1
解决办法
167
查看次数

是否可以在分配期间在C++中给出类的定义,如java中所允许的那样

或者简单地说

我能做点什么吗

class A {
public:
  virtual void foo() = 0;
};

class B {
  public:
    A *a;
    b(){
       a = new A() { void foo() {printf("hello");}
    }
};
Run Code Online (Sandbox Code Playgroud)

c++ anonymous-class

5
推荐指数
1
解决办法
1177
查看次数

匿名类与实现接口的编程约定

从android开发的角度来看,在编程时,您更喜欢为侦听器实现哪种方式?还是您认为哪种方式最适合可读代码?我给出了关于这些事情的两个示例,但是认为更复杂的类(例如,具有多个Listener的类):

第一个示例是匿名类:

public class SenderReceiverActivity extends Activity {

Button cancelButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.sending);
    cancelButton = (Button) findViewById(R.id.button1);
    cancelButton.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {

        }
    });
}}
Run Code Online (Sandbox Code Playgroud)

第二个例子是实现接口:

public class SenderReceiverActivity extends Activity implements OnClickListener {

Button cancelButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.sending);
    cancelButton = (Button) findViewById(R.id.button1);
    cancelButton.setOnClickListener(this);
}

public void onClick(View v) {

}
}
Run Code Online (Sandbox Code Playgroud)

java android interface anonymous-class

5
推荐指数
1
解决办法
616
查看次数

关于匿名类的一个ClassCastException(java)

现在我得到一些如下的日志(log-1)

java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to ClassA$1
at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1010)
...
Run Code Online (Sandbox Code Playgroud)


1010行

final LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) obj.method();//line 1010
Run Code Online (Sandbox Code Playgroud)


我想,日志应该是这样的(log-2)

java.lang.ClassCastException: ClassA$1 cannot be cast to android.widget.LinearLayout$LayoutParams
Run Code Online (Sandbox Code Playgroud)

我想知道为什么我会得到log-1,是不是?
如果log-1是正确的,那么我如何编写代码来创建这样的异常?

ps:我知道ClassA $ 1是一个匿名类.
ps:我在猴子测试中得到了这个日志,而且很难重新出现

有人告诉我:

MyInterface my = ClassA$1;//$1 is an anonymous class which implements MyInterface
my.getClass().cast(lp);
Run Code Online (Sandbox Code Playgroud)

那么日志就像log-1
但为什么日志没有指出"cast"方法行?
我检查文件夹框架/ base/core,没有人调用方法"?java.lang.Class.cast(Object obj)"的
任何想法?

java android anonymous-class classcastexception monkey

5
推荐指数
1
解决办法
287
查看次数

为什么我能够以静态方法打印此字段?

public class Main {
    private final int value = 3;

    public static Runnable buildRunner() {
        return new Runnable() {

            @Override
            public void run() {
                System.out.println(Main.this.value);
            }
        };

    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Eclipse Kepler和JRE 7.

buildRunner方法中 - 为什么我能看到thisMain的?静态方法中Main的'this'是什么?为什么编译?

如果value是最终的,我只能这样做.我不能调用Main和stuff的实例方法,但是值不是十分贬值的static!此外,如果我想在使用buildRunner方法,外面run的方法new Runnable,编译器将停止从我做那.

java eclipse anonymous-class

5
推荐指数
1
解决办法
71
查看次数

Java:匿名类的初始化和构造函数

我想了解一个我在处理匿名课程时遇到的奇怪行为.

我有一个类在其构造函数中调用受保护的方法(我知道,设计很差,但这是另一个故事...)

public class A {
  public A() {
    init();
  }
  protected void init() {}
}
Run Code Online (Sandbox Code Playgroud)

然后我有另一个扩展A和覆盖的类init().

public class B extends A {
  int value;
  public B(int i) {
    value = i;
  }
  protected void init() {
    System.out.println("value="+value);
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我编码

B b = new B(10);
Run Code Online (Sandbox Code Playgroud)

我明白了

> value=0
Run Code Online (Sandbox Code Playgroud)

这是预期的,因为超级类的构造函数在Bctor 之前调用然后value仍然是.

但是在使用像这样的匿名类时

class C {
  public static void main (String[] args) {
    final int avalue = Integer.parsetInt(args[0]);
    A a = new A() …
Run Code Online (Sandbox Code Playgroud)

java constructor javac anonymous-class javap

5
推荐指数
1
解决办法
717
查看次数

如何检查Iterator.next()是否== null?

如何检查列表中的下一个元素是否为空?

while(it.hasNext()){

            System.out.println(it.next()+"\n");
        }
Run Code Online (Sandbox Code Playgroud)

这是我尝试的方式,但是当最后一个元素为null时,它将其打印为null.

我试着改变它

 while(it.hasNext()){
    if(it.next()==null){
    }else             
        System.out.println(it.next()+"\n");
            }
Run Code Online (Sandbox Code Playgroud)

但这只是让它变得更糟,因为有些元素甚至不打印!

这是我的迭代方法/匿名类

public Iterator<Filmi> iterator3DFilms ()throws FilmiException{
        if(filmList.isEmpty())
            throw new FilmiException("No Films on the list");
        return new Iterator<Filmi>(){
            private int index=0;
            public boolean hasNext(){
                return index <filmList.size();
            }
            public Filmi next(){
                Filmi lb = filmList.get(index++);

                if(lb.is3D()== true)
                    return lb;
                if(hasNext())
                    return next();
                return null;
            }
            public void remove(){}
        };
    }
Run Code Online (Sandbox Code Playgroud)

空打印只发生在最后一个元素谢谢.

java null iterator anonymous-class

5
推荐指数
3
解决办法
1万
查看次数

在哪个版本的Java中引入了匿名类?

匿名类的目的是明确和可以理解的。但是我找不到支持匿名类的Java的最低版本。谁能告诉我支持它的确切Java版本?

java anonymous-class

5
推荐指数
1
解决办法
1437
查看次数

验证者由于方法错误而拒绝了Lambda

在一个Android项目中,我尝试使用Java 8的新lambda功能,因此我将现有的可运行功能的匿名内部类修改为lambda。但是,使用以下错误消息执行代码时,应用程序崩溃:

11-25 11:20:33.485 27105-27105/com.infor.Dashboards.dev E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.infor.Dashboards.dev, PID: 27105
java.lang.VerifyError: Verifier rejected class com.infor.Dashboards.Settings.DebugTestingFragment$3$1$$Lambda$-void_onPostExecute_java_lang_String_string_LambdaImpl0 due to bad method void com.infor.Dashboards.Settings.DebugTestingFragment$3$1$$Lambda$-void_onPostExecute_java_lang_String_string_LambdaImpl0.processMessage(android.os.Message) (declaration of 'com.infor.Dashboards.Settings.DebugTestingFragment$3$1$$Lambda$-void_onPostExecute_java_lang_String_string_LambdaImpl0' appears in /data/app/com.infor.Dashboards.dev-1/base.apk)
    at com.infor.Dashboards.Settings.DebugTestingFragment$3$1.onPostExecute(DebugTestingFragment.java:308)
    at com.infor.Dashboards.Settings.DebugTestingFragment$3$1.onPostExecute(DebugTestingFragment.java:304)
    at android.os.AsyncTask.finish(AsyncTask.java:651)
    at android.os.AsyncTask.-wrap1(AsyncTask.java)
    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668)
    at android.os.Handler.dispatchMessage(Handler.java:104)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5460)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Run Code Online (Sandbox Code Playgroud)

这是示例代码(单击按钮时应用崩溃):

view.findViewById(R.id.test_code).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        new AsyncTask<Void, Void, String>() {
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
            }

            @Override
            protected void …
Run Code Online (Sandbox Code Playgroud)

lambda android anonymous-class inner-classes java-8

5
推荐指数
0
解决办法
527
查看次数