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!” 通过仅在括号中添加代码来表示并且不改变任何其他内容。
有人可以帮我解决这个问题吗?我仍然没有任何线索。 我昨天在测验中留下了空白:((感谢您的帮助)
答案 0 :(得分:4)
class Do{
void doit(){
ClassA a = new ClassA();
a.doSomething(new InterfaceA () {
{ System.out.println("Hello world"); }
@Override public void doSomethingElse() { }
});
}
}
关键是使用初始化程序定义匿名类,然后使用“new”创建该类的新对象。创建对象会执行初始化程序。附:这已经过测试。
这似乎不是一个好的测验问题;做这样的事情是非常模糊的,可能不是人们实际编码的正常事情。它看起来更像是一个拼图而不是一个实际的测试问题。除非有更好的答案,否则我没有发现......
答案 1 :(得分: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!");
}
});
否则答案就像其他答案所说的那样奇怪。
答案 2 :(得分: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/
除非你的老师试图和你玩得开心,否则这可能更像是一个谜语般的答案。除非你的老师试图和你玩得开心。