我不明白为什么我们需要声明注释。
答案 0 :(得分:1)
我们希望促进Android应用程序的编写和维护。
我们相信具有明确意图的简单代码是实现这些目标的最佳方式。
Robert C. Martin写道:
读取[代码]与写入所花费的时间比例远远超过10比1 [因此]使其易于阅读使其更容易编写。 虽然我们都喜欢开发Android应用程序,但我们常常想:为什么我们总是需要一遍又一遍地编写相同的代码?为什么我们的应用程序难以维护? Context和Activity上帝对象,玩弄线程的复杂性,难以发现API,匿名监听器类的负载,大量不需要的演员......我们不能改进吗?
如何吗
使用Java注释,开发人员可以展示他们的意图,让AndroidAnnotations在编译时生成管道代码。
功能强>
依赖注入:注入视图,附加功能,系统服务,资源,...... 简化的线程模型:注释您的方法,以便它们在UI线程或后台线程上执行。 事件绑定:注释处理视图事件的方法,不再是丑陋的匿名监听器类! REST客户端:创建客户端界面,AndroidAnnotations生成实现。 没有魔力:由于AndroidAnnotations在编译时生成子类,您可以检查代码以查看它是如何工作的。 AndroidAnnotations提供了那些好东西,甚至更少,不到50kb,没有任何运行时性能影响!
您的Android代码是否易于编写,阅读和维护?
看那个:
@EActivity(R.layout.translate) // Sets content view to R.layout.translate
public class TranslateActivity extends Activity {
@ViewById // Injects R.id.textInput
EditText textInput;
@ViewById(R.id.myTextView) // Injects R.id.myTextView
TextView result;
@AnimationRes // Injects android.R.anim.fade_in
Animation fadeIn;
@Click // When R.id.doTranslate button is clicked
void doTranslate() {
translateInBackground(textInput.getText().toString());
}
@Background // Executed in a background thread
void translateInBackground(String textToTranslate) {
String translatedText = callGoogleTranslate(textToTranslate);
showResult(translatedText);
}
@UiThread // Executed in the ui thread
void showResult(String translatedText) {
result.setText(translatedText);
result.startAnimation(fadeIn);
}
// [...]
}
答案 1 :(得分:0)
Java注释绑定特定条件以满足代码。考虑一个场景,我们认为我们正在从anther类中覆盖一个方法,并且我们实现了(我们认为)覆盖该方法的代码。但是如果我们错过了完全覆盖一个(例如我们拼写错误的名字。在超类中它是" mMethodOverridden"我们输入" mMethodoverridden")。该方法仍然可以编译和执行,但它不会做它应该做的事情
所以@Override是我们告诉Java如果我们做正确的事情让我们知道的方式。如果我们用@override注释一个方法并且它没有覆盖任何东西,编译器会给我们一个错误
其他注释以非常类似的方式工作。
有关详细信息,请参阅文档Lesson: annotations
答案 2 :(得分:0)
注释基本上是可以添加到Java源代码的语法元数据。可以注释类,方法,变量,参数和包。
元数据是关于数据的数据
为什么要引入注释?
在注释之前(甚至之后),XML被广泛用于元数据,并且某种特定的应用程序开发人员和架构师认为XML维护变得很麻烦。他们想要的东西可以与代码紧密结合,而不是XML,它与代码非常松散耦合(在某些情况下几乎是分开的)。如果你谷歌“XML与注释”,你会发现很多有趣的辩论。有趣的是,引入了XML配置以将配置与代码分开。最后两个陈述可能会在你的脑海中产生怀疑,这两个是创造一个循环,但两者都有其优点和缺点。
例如:
@覆盖
它指示编译器检查父类是否匹配方法。