0
class Do{
    void doit(){
        ClassA a = new ClassA();
        a.doSomething(>>>CODE HERE<<<);
    }
}
interface InterfaceA{
    void doSomethingElse();
}
class ClassA{
    void doSomething(InterfaceA f){
    }
}

问题:完成上述代码,使 doit 方法打印“Hello world!” 通过仅在括号之间添加代码,而不更改其他任何内容。

有人可以帮我解决这个问题吗?我还是没有头绪。我昨天在测验中把它留空了:((。谢谢你的帮助

4

3 回答 3

4
class Do{
    void doit(){
        ClassA a = new ClassA();
        a.doSomething(new InterfaceA () {
             { System.out.println("Hello world"); }
             @Override public void doSomethingElse() { }
             });
    }
}

关键是定义一个带有初始化器的匿名类,然后使用“new”来创建该类的新对象。创建对象会执行初始化程序。PS 这个已经测试过了。

这似乎不是一个好的测验问题。做这样的事情非常晦涩难懂,可能不是人们实际编码的正常事情。它看起来更像是一个谜题,而不是一个实际的测试问题。除非有更好的答案我还没有发现......

于 2013-10-24T01:39:14.963 回答
1

好的,如果测验问题看起来像这样:

class Do{
    void doit(){
        ClassA a = new ClassA();
        a.doSomething(>>>CODE HERE<<<);
    }
}
interface InterfaceA{
    void doSomethingElse();
}
class ClassA{
    void doSomething(InterfaceA f){
        // NOTE THIS CHANGE!
        f.doSomethingElse();
    }
}

然后你可以改变这个:

a.doSomething(>>>CODE HERE<<<);

对此:

a.doSomething(new InterfaceA() {
    @Override public void doSomethingElse() {
        System.out.println("Hello world!");
    }
});

否则,答案就像其他答案所说的那样奇怪。

于 2013-10-24T01:44:43.290 回答
0

我不知道这是否是测验的预期答案,但这应该有效:

class Do{
    void doit(){
        ClassA a = new ClassA();
        a.doSomething(null); System.out.println("Hello world!");
               //    ^ starting paren           closing paren ^
    }
}
interface InterfaceA{
    void doSomethingElse();
}
class ClassA{
    void doSomething(InterfaceA f){
    }
}

基本上只需将两行放在同一行,您就不必为接口提供实现。然后唯一添加的代码是null); System.out.println("Hello world!"

灵感来自:http: //xkcd.com/327/

这可能更像是对技术测验的谜语般的答案……除非你的老师想和你一起玩。

于 2013-10-24T01:41:55.567 回答