我在编译时得到一个我没想到的匿名类.相关代码如下,然后更详细的解释:
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) 我的代码中有类似的东西:
#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 : …
我听说Java字节码实际上不支持任何类型的未命名类.javac如何将未经修改的类转换为命名类?
我有一个问题,当你在匿名类中声明一个匿名类时,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转换为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
有没有办法在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) 考虑一下这段代码:
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成员类.然而...
error: modifier private not allowed hereIllegal modifier for the local class PrivateInnerClass; only abstract or final is permitted 真的是本地课吗?什么?为什么匿名类不能有public,protected或private(以下简称为those)成员类而它们可具有those构件的字段和方法? …
请考虑以下代码:
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)
currentList?我只是好奇 :)
匿名类可以声明自己的类型参数吗?
内部类是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()会起作用,但我不相信也应该这样.