标签: anonymous-class

对公共枚举的引用导致匿名类

我在编译时得到一个我没想到的匿名类.相关代码如下,然后更详细的解释:

CircuitType.java的整体:

public enum CircuitType { V110A20, V110A30, V208A20, V208A30 }
Run Code Online (Sandbox Code Playgroud)

来自Auditor.java,第3-9行:

public class Auditor {
    private String[] fileNames;
    private int numV110A20;
    private int numV110A30;
    private int numV208A20;
    private int numV208A30;
Run Code Online (Sandbox Code Playgroud)

来自Auditor.java,第104-121行:

[...]
switch (newCircuit.getType()) {
    case V110A20:
        this.numV110A20++;
        break;
    case V110A30:
        this.numV110A30++;
        break;
    case V208A20:
        this.numV208A20++;
        break;
    case V208A30:
        this.numV208A30++;
        break;
    default:
        System.err.println("An Error Has Occured.");
        System.exit(-1);
        break;
}
[...]
Run Code Online (Sandbox Code Playgroud)

从Circuit.java,第1-5行:

public class Circuit {
    private CircuitType myType;
    public CircuitType getType() {
        return this.myType;
    }
[...]
Run Code Online (Sandbox Code Playgroud)

当命令

javac *.java …
Run Code Online (Sandbox Code Playgroud)

java enums anonymous anonymous-class switch-statement

12
推荐指数
1
解决办法
1732
查看次数

匿名类的虚拟表

我的代码中有类似的东西:

#include <iostream>
#include <cstdlib>

struct Base
{
  virtual int Virtual() = 0;
};

struct Child
{
  struct : public Base
  {
    virtual int Virtual() { return 1; }
  } First;

  struct : public Base
  {
    virtual int Virtual() { return 2; }
  } Second;
};

int main()
{
  Child child;
  printf("ble: %i\n", ((Base*)&child.First)->Virtual());
  printf("ble: %i\n", ((Base*)&child.Second)->Virtual());

  system("PAUSE");
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望这会给出这个输出:

ble: 1
ble: 2
Run Code Online (Sandbox Code Playgroud)

当它在GCC下编译时(3.4.5我相信).

但是,在Visual Studio 2008下编译并运行它,可以得到:

ble: 2
ble: 2
Run Code Online (Sandbox Code Playgroud)

有趣的是,如果我给出Base-derived structs names(struct s1 : …

c++ virtual virtual-functions class anonymous-class

12
推荐指数
2
解决办法
807
查看次数

如何用Java编译匿名类?

我听说Java字节码实际上不支持任何类型的未命名类.javac如何将未经修改的类转换为命名类?

java compiler-construction javac anonymous-class

12
推荐指数
1
解决办法
1641
查看次数

Proguard在Java中删除Anonymous类中的Anonymous类

我有一个问题,当你在匿名类中声明一个匿名类时,Proguard不工作.这是一个基本示例中的样子:

public class Class1 {
  public void function1 (){
     new Class2(){
        @Override
        public void function2(){
          new Class3(){
            @Override
            public void function3(){
              // do something
            }
          }
        }
     }
  }
}
Run Code Online (Sandbox Code Playgroud)

在gradle构建脚本期间,正在执行proguard.现在我收到以下错误:

 my.package.Class1$2$1: can't find enclosing method 'void function2()' in program class my.package.Class1$2
Run Code Online (Sandbox Code Playgroud)

如果我将代码更改为只有1个"级别"的匿名类,则proguard正在完成而没有错误.这有效:

public class Class1 {
  public void function1 (){
      Class3 class3Instance = new Class3(){
            @Override
            public void function3(){
              // do something
            }
      }
      new Class2(){
        @Override
        public void function2(){
           //do something with class3Instance  
        }
     }
  }
}
Run Code Online (Sandbox Code Playgroud)

该项目是一个Android项目,但据我所知,这应该不重要. …

java android proguard anonymous-class

12
推荐指数
1
解决办法
651
查看次数

如何将@SerialVersionUID添加到匿名类?

我想将以下代码从Java转换为Scala:

Foo foo = new Foo() { private static final long serialVersionUID = 12345L; }
Run Code Online (Sandbox Code Playgroud)

Foo是一个抽象类.

Scala中的等效代码如何?

java serialization programming-languages scala anonymous-class

11
推荐指数
1
解决办法
746
查看次数

匿名类可以在C++中用作返回类型吗?

有没有办法在C++中使用匿名类作为返回类型?

我用谷歌搜索这可行:

struct Test {} * fun()
{
}
Run Code Online (Sandbox Code Playgroud)

但是这段代码没有编译,错误信息是:

可能无法在返回类型中定义新类型

实际上代码没有任何意义,我只是想弄清楚一个匿名类是否可以在C++中用作返回类型.

这是我的代码:

#include <typeinfo>
#include <iterator>
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdlib>

using namespace std;

int main(int argc, char **argv)
{
    int mx = [] () -> struct { int x, y ; } { return { 99, 101 } ; } ().x ;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我用g ++ xx.cpp -std = c ++ 0x编译这段代码,编译器得到:

expected primary-expression before '[' token.
Run Code Online (Sandbox Code Playgroud)

c++ anonymous-types anonymous-class

11
推荐指数
2
解决办法
2947
查看次数

JLS的哪一部分表示匿名类不能拥有public/protected/private成员类

考虑一下这段代码:

public class TopLevelClass {
    Cloneable c = new Cloneable() {
        private int privateField;
        private void privateMethod() {};
    };
}
Run Code Online (Sandbox Code Playgroud)

有一个匿名类,它有一个private成员字段和一个private成员方法.它已成功编译.

然后考虑这个:

public class TopLevelClass {
    Cloneable c = new Cloneable() {
        private class PrivateInnerClass {}
    };
}
Run Code Online (Sandbox Code Playgroud)

有一个匿名类,它有一个private成员类.然而...

  • javac说: error: modifier private not allowed here
  • 日食说:Illegal modifier for the local class PrivateInnerClass; only abstract or final is permitted 真的是本地课吗?

什么?为什么匿名类不能有public,protectedprivate(以下简称为those)成员类而它们可具有those构件的字段和方法? …

java access-modifiers anonymous-class inner-classes jls

11
推荐指数
2
解决办法
639
查看次数

Java是否"缓存"匿名类?

请考虑以下代码:

for(int i = 0;i < 200;i++)
{
  ArrayList<Integer> currentList = new ArrayList<Integer>() {{
    add(i);
  }};
  // do something with currentList
}
Run Code Online (Sandbox Code Playgroud)
  • Java将如何对待这类currentList
  • 对于200个对象中的每一个,它会认为它是一个不同的类吗?
  • 即使在创建第一个对象后,它是否会受到性能影响?
  • 是以某种方式缓存吗?

我只是好奇 :)

java performance anonymous-class

10
推荐指数
2
解决办法
2282
查看次数

10
推荐指数
2
解决办法
3557
查看次数

两个双嵌套匿名内部类.如何获得一级匿名班级成员?

内部类是Adapter,内部类是Listener.如何从Listener访问(隐藏)适配器成员/方法?

list.setAdapter(new Adapter() {
  public View getView() {
    // ...
    button.setListener(new Listener() {
      public void onClick() {
        Adapter.this.remove(item);
      }
    );
  }
});
Run Code Online (Sandbox Code Playgroud)

通常要访问外部类成员,你只需要说Outer.this.member,但在这种情况下它给了我以下错误(使用实际的类):

error: not an enclosing class: ArrayAdapter
Run Code Online (Sandbox Code Playgroud)

那么你应该如何从内部内部类访问内部类成员?我不喜欢多级嵌套的匿名类,但在这种情况下,我正在学习一个新的API,并且还不确定它是否更清晰.我已经有一个解决方法,但无论如何都想知道.remove()实际上并没有被内部内部类所掩盖,因此在这种情况下指定类并不是必需的,但是希望在代码中清楚地说明这个remove()方法的位置.我也想知道它是否被遮挡.我相信使用Outer.$6.remove()会起作用,但我不相信也应该这样.

java anonymous-class inner-classes

10
推荐指数
1
解决办法
1722
查看次数