java中的匿名内部类及其语法
我对Java非常陌生,我正在尝试编写一个android应用程序,并通过facebook api进行测试。我特别关注的是这个java中的匿名内部类及其语法,java,android,Java,Android,我对Java非常陌生,我正在尝试编写一个android应用程序,并通过facebook api进行测试。我特别关注的是这个 LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult log
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
}
@Override
public void onCancel() {
// App code
}
@Override
public void onError(FacebookException exception) {
// App code
}
});
但是,这从未调用FaceBookCallbackLogin中的onSuccess方法,而且我无法显式调用它,因为我没有参数LoginResult
那么,我该如何编写它,以便在不同的类中登录?在原始代码中,onSuccess-LoginResult的参数来自哪里 好吧,那就这么说吧
匿名类使您的代码更加简洁。
它们使您能够同时声明和实例化一个类。
它们与本地类类似,只是它们没有名称。使用
如果只需要使用一次本地类,则可以使用它们
上述方法的一个好处是,它允许您精确地定义特定接口实现,而无需为每个实现创建新类。看看下面的例子
interface Foo {
String saySomething(String something);
}
class Bar {
public static void main(String [] args) {
//I want this anonymous inner classes implementation to **uppercase** the strings
Foo sayUppercase = new Foo() {
@Override
public String saySomething(String something) {
return something.toUpperCase();
}
};
sayUppercase.saySomething("Java");
//output: JAVA
Foo sayLowerCase = new Foo() {
//I want this anonymous inner classes implementation to **lowercase** the strings
@Override
public String saySomething(String something) {
return something.toLowerCase();
}
};
sayLowerCase.saySomething("Java");
//output: java
}
}
请注意,我是如何以不同的方式实现相同的saySomething方法的,而不必为每个实现创建两个单独的类文件。我几乎内联了这个类的实现
从Android的角度来看,这非常有用,想象一下必须为您的点击监听器创建一个单独的类。仍然有可能,但是为click listener的实现创建一个简单的匿名内部类要简单得多,可读性也更高
mLoginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Perform Action
}
});
比创建一个实现View.OnClickListener的新类要简单得多,如下所示
public class LoginButtonOnClickListener implements View.OnClickListener {
@Override
public void onClick(View view) {
//Perform action
}
}
从匿名内部类更改为独立类的方式看起来很好 但是,在第一个示例中,您已经完成了以下操作:
LoginManager.getInstance().registerCallback
loginButton.registerCallback
在第二个示例中,您已经这样做了:
LoginManager.getInstance().registerCallback
loginButton.registerCallback
也许这就是问题所在