这是一个关于Java代码的问题,例如:
List<String> list = new ArrayList<String>() {{add("hello"); add("goodbye");}}
Run Code Online (Sandbox Code Playgroud)
程序员匿名扩展ArrayList只是为了在实例初始化块中推迟.
问题是:如果程序员的唯一目的只是达到以下目的:
List<String> list = new ArrayList<String>();
list.add("hello");
list.add("goodbye");
Run Code Online (Sandbox Code Playgroud)
那么第一种方式做到这一点的意外后果是什么?
我对这一行有点怀疑:
匿名类无法定义构造函数
那么,为什么我们还可以使用以下语法定义Anonymous类:
new class-name ( [ argument-list ] ) { class-body }
Run Code Online (Sandbox Code Playgroud) 我是一名C++程序员,当我看到下面的例子时,我正在阅读这个网站.这种技术在Java中被称为什么?它有用吗?
class Application {
...
public void run() {
View v = createView();
v.display();
...
protected View createView() {
return new View();
}
...
}
class ApplicationTest extends TestCase {
MockView mockView = new MockView();
public void testApplication {
Application a = new Application() { <---
protected View createView() { <---
return mockView; <--- whao, what is this?
} <---
}; <---
a.run();
mockView.validate();
}
private class MockView extends View
{
boolean isDisplayed = false;
public void display() …Run Code Online (Sandbox Code Playgroud) 假设我有以下代码段:
template <class T> void f(T arg) { arg(); }
void g()
{
struct { void operator()(void) { } } foo;
f(foo);
}
Run Code Online (Sandbox Code Playgroud)
Visual C++接受这个.但是,当我尝试GCC时,我得到:
$ g++ --version # just in case this matters
g++ (Debian 4.4.5-8) 4.4.5
...
$ g++ foo.cc
foo.cc: In function 'void g()':
foo.cc:7: error: no matching function for call to 'f(g()::<anonymous struct>&)'
Run Code Online (Sandbox Code Playgroud)
当foo全局作用域并且其类型具有名称时,这是有效的.但是当类型是匿名的或在内部声明时g()它不会.
为什么GCC拒绝这个?它是有效的C++吗?
我正在开发一个Android应用程序,我刚刚碰到了一些东西.我有一些匿名类(事件监听器).它们是从数据库中参数化的.我做的是这样的:
buttonA.setOnTouchListener(new View.OnTouchListener() {
private Boolean isActive = null;
private boolean isTrigger;
private int onLevel;
private int offLevel;
private int chIdx;
@Override
public boolean onTouch(View v, MotionEvent event) {
if (isActive == null) {
Cursor btnSettings = dbHelper.getButtonsTable().fetchButton(1, profileId, currentMode);
...
...
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
将布尔对象用作trilean开关(如果侦听器尚未参数化,它具有空值)或者我应该使用两个布尔变量...或者可能是整数?
你有想法吗?
我即将开始编写一个演示程序来编写我即将给出的演讲.我想让班上的每个学生都下载这个应用程序,然后能够通过命令行以交互方式创建对象实例(及其图形表示).我决定用Java写的,而不是因为它是我最熟悉的语言,而是因为它有简单的图形类,我可以很肯定的罐子会在他们的计算机上运行.
简介.现在的问题是:
为此程序实现某些自定义命令行语法的好方法是什么?我想使用一个简单,随意的语法,如:
CREATE Monster Bob;
Bob.jump();
LS Bob //to list Bob's methods or something.
LS CREATE //to list all the classes
Run Code Online (Sandbox Code Playgroud)
首先,当我想到这个问题时,我会首先想到的是什么.
我可以想象我可以在树型链接中拥有一组地图.我可以解析每个关键词作为下一个地图的关键.因此,"CREATE Monster Bob"可以被评估为
1)搜索关键字"CREATE"的关键字映射.返回值,这是对类映射的引用.2)搜索类映射关键"怪物".返回值,这是一个实现一些接口Leaf的工厂类,它让我知道它是一个叶子值(我将使用instanceof进行检查).
3)也许Leaf接口将包含一个名为execute()的方法,它可以做任何想做的事情.在这种情况下,它将创建一个Monster对象,将此对象添加到名为Objects的名为Bob的地图中.(这个Leaf业务听起来很丑,但可以清理.)
凉.但这句话对我来说有点困难:Bob.jump();
1)搜索"Bob"的一些对象图.返回一些对象实现一个接口与等的方法"评价(字符串或多个)",并将它传递字符串"跳()"
2)鲍勃搜索的用于"跳()"方法的一些内部地图,然后...?在c ++中,我将使用键作为指向要执行的成员函数Monster.jump()的指针.但是我不相信java中没有函数指针这样的东西.我已经读过你可以使用匿名类来完成这个,虽然我没有尝试过.看起来它会起作用.
所以,这将有效,但有更优雅的方式去做吗?我以前从未写过任何类型的翻译.如果有人提供一些提示,我想以一种很好的方式做一些事情并在这个过程中学到一些东西.如果我不是很结构化的话,这似乎是一种可能容易出错的方法,特别是当Bob和其他所有对象开始解析他们自己的指令并使用匿名函数时.此外,看起来除了普通代码之外,每个类都需要一个运行时就绪的接口.
我也不知道Java的那么好,所以如果有一些景点在那里我可能会撞到南墙,然后我想太了解.
我在这里先向您的帮助表示感谢.
假设以下场景:
void thisIsCalledManyTimes(){
// ....
someObject.executeIfNecessary( new Runnable(){
void run(){ //do sth here}
});
}
Run Code Online (Sandbox Code Playgroud)
匿名对象占用多少空间?我知道每个对象匿名obj都会有一个指向run其方法查找表中相同实现的指针.
在WebView的子类中,我将其放在getTitle()的重写方法中:
@Override
public String getTitle() {
Activity a = getVoTts().getActivity();
a.runOnUiThread(new Runnable() {
public void run() {
String tit = VoWebView.super.getTitle();
}
});
String title = tit; // this is what I WANT to do, it won't compile of course
...
...
}
Run Code Online (Sandbox Code Playgroud)
但是String tit是在匿名Runnable类中关闭的,因此当然不能在该方法下访问。
是否有任何技术或“技巧”可以让我将在匿名Runnable类中获取的值传递给语句(使用同一方法)或将其分配给数据成员?
如果匿名类正在扩展/实现类/接口,为什么我不能添加新方法?
换句话说,这有效:
class A {
void a() {
System.out.println("a in A");
}
}
class B extends A {
@Override
void a() {
System.out.println("a in B");
}
void b() {
System.out.println("b in B");
}
}
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用:
class C {
A anonA() {
return new A() {
void b() {
System.out.println("b in C");
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
鉴于:
public static void main(String[] args) {
B b = new B();
b.b();
// C c = new C();
// A anonA = c.anonA();
// …Run Code Online (Sandbox Code Playgroud) 我以为我可以使用匿名字段制作有序的地图类型:
type customMap struct{
map[string]string
ordered []string
}
Run Code Online (Sandbox Code Playgroud)
我可以在哪里引用地图customMapInstance["key"]并迭代ordered.唉,似乎数组和地图不是有效的匿名字段.我怀疑这是有充分理由的......