You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Dans le lot des https://developer.android.com/topic/libraries/support-library/index.html[supports librairies] que propose Google pour le développement Android (principalement pour la compatibilité des certains composants sur des anciennes versions de l'OS) il y en a une qui de prime abord ne va pas beaucoup servir c'est `support-annotations`.
15
+
Dans le lot des https://developer.android.com/topic/libraries/support-library/index.html[supports librairies] que propose Google pour le développement Android (principalement pour la compatibilité de certains composants sur des anciennes versions de l'OS) il y en a une qui de prime abord ne va pas beaucoup servir c'est `support-annotations`.
16
16
17
17
[%hardbreaks]
18
18
19
19
En effet cette librairie ne contient pas grand chose en terme de classes ni de http://www.methodscount.com/?lib=com.android.support%3Asupport-annotations%3A24.2.1[méthodes]. En revanche elle possède de nombreuses annotations (d'où son nom...). Le comble c'est que presque toutes ces annotations sont définie en tant que `@Retention(CLASS)`, c'est-à-dire qu'elles seront conservées lors la génération des fichiers _.classes_ mais n'auront pas d'impact au moment de l'execution du code`.
20
-
À quoi peuvent-elles servir ? Et bien c'est le propre des annotations, elles servent à apporter des informations sur des portions de code et éventuellement donner quelques instructions au compilateur. L'un des exemples le plus connu est _@Deprecated_ que vous devez cotoyer tous les jours. Cette annotation a pour seul but d'informer le développeur qu'il est fortement déconseillé d'utilser cette méthode.
20
+
À quoi peuvent-elles servir ? Et bien c'est le propre des annotations, elles servent à apporter des informations sur des portions de code et éventuellement donner quelques instructions au compilateur. L'un des exemples le plus connu est _@Deprecated_ que vous devez cotoyer tous les jours. Cette annotation a pour seul but d'informer le développeur qu'il est fortement déconseillé d'utiliser cette méthode.
21
21
22
-
L'avantage d'utiliser les `support-annotations` est qu'Android Studio connait leur signification et donc vas pouvoir highlighter des portions de code en rapport avec celles-ci lorsqu'un comportement attendu n'est pas respecté.
22
+
L'avantage d'utiliser les `support-annotations` est qu'Android Studio connait leur signification et donc va pouvoir highlighter des portions de code en rapport avec celles-ci lorsqu'un comportement attendu n'est pas respecté.
23
23
24
24
Faisons un petit tour des https://developer.android.com/reference/android/support/annotation/package-summary.html[annotations présentes dans `support-annotations`] et de leur intégration dans Android Studio
25
25
26
26
27
27
# @Nullable / @NonNull
28
28
29
-
Le couple d'annotation le plus connu est probablement @Nullable et @NonNull, car déjà présent depuis un certain temps dans différents packages comme https://www.jetbrains.com/help/idea/2016.2/nullable-and-notnull-annotations.html[Intellij] ou http://mvnrepository.com/artifact/javax.annotation/javax.annotation-api/1.3[javax.annotations].
29
+
Le couple d'annotations le plus connu est probablement @Nullable et @NonNull, car déjà présent depuis un certain temps dans différents packages comme https://www.jetbrains.com/help/idea/2016.2/nullable-and-notnull-annotations.html[Intellij] ou http://mvnrepository.com/artifact/javax.annotation/javax.annotation-api/1.3[javax.annotations].
30
30
31
31
Annoter une méthode @Nullable permet d'indiquer que le retour de celle-ci peut être _null_ et donc qu'il est fort préférable de procéder à un null check avant d'utiliser l'objet retourné. Le @NonNull permet lui d'assurer que le résultat est toujours un objet valide.
32
32
@@ -43,10 +43,10 @@ Annoter une méthode @Nullable permet d'indiquer que le retour de celle-ci peut
43
43
44
44
# @<Any>Res
45
45
46
-
Le groupe d'annotation suivant est probablement celui que j'utilise le plus souvent est le `@...Res`.
46
+
Le groupe d'annotations suivant est probablement celui que j'utilise le plus souvent est le `@...Res`.
47
47
48
48
Et oui étant donné que toutes les références des ressources sont des `int` lorsqu'elles sont générées dans votre class _R_ il est difficile de les différencier lorsqu'on en passe une en paramètre de méthode.
49
-
Et bien avec un `@ColorRes int myColor`, Android studio s'occupera de vous avertir si la valeur passée ne correspond pas à une ressource du type `color`.
49
+
Et bien avec un `@ColorRes int myColor`, Android Studio s'occupera de vous avertir si la valeur passée ne correspond pas à une ressource du type `color`.
50
50
51
51
{lt}div style="text-align : center"{gt}
52
52
{lt}a class="inlineBoxes" href="/images/posts/2016-09_AndroidAnnotations/android_annotations_stringres.png" data-lightbox="1" title="Warning sur un paramètre @StringRes"{gt}
@@ -65,7 +65,7 @@ La liste (non complète) des ressources que vous pouvez contrôler :
65
65
- `StringRes`
66
66
67
67
# @CallSuper
68
-
Je l'ai découverte récement et je trouve qu'elle est d'une grande aide. Étant donné l'importance du cycle de vie de chaque élément dans Android
68
+
Je l'ai découverte récemment et je trouve qu'elle est d'une grande aide. Étant donné l'importance du cycle de vie de chaque élément dans Android
69
69
il est indispensble de s'assurer que chaque méthode est appelée au bon moment.
70
70
Et lorsque qu'il y a un peu de refactor il arrive vite d'oublier d'appeler le super d'une méthode surchargée. Maintenant vous en serez averti !
71
71
@@ -81,7 +81,7 @@ Et lorsque qu'il y a un peu de refactor il arrive vite d'oublier d'appeler le su
81
81
# @RequirePermission
82
82
Pour être sur de ne pas oublier une permission dans le `manifest.xml` cette annotation permettra (sur une classe ou une méthode) de vous rappeler explicitement quelles sont celles dont vous avez besoin.
83
83
84
-
On peut d'ailleurs voir le warning d'android studio en créant un sample project et en démarrant une nouvelle activity avec un `Intent.ACTION_CALL`.
84
+
On peut d'ailleurs voir le warning d'Android Studio en créant un sample project et en démarrant une nouvelle activity avec un `Intent.ACTION_CALL`.
85
85
86
86
87
87
{lt}div style="text-align : center"{gt}
@@ -93,8 +93,8 @@ On peut d'ailleurs voir le warning d'android studio en créant un sample project
93
93
{lt}br/{gt}
94
94
95
95
# @StringDef
96
-
Lorsque l'on dev pour Android on doit savoir que https://www.youtube.com/watch?v=Hzs6OBcvNQE[les enums sont a proscrire] et du coup c'est embetant, car c'est tout de même bien pratique.
97
-
La parade est donc de passer par une liste de constantes et de créer une nouvelle annotation qui limitera les valeurs attendu, comme ceci :
96
+
Lorsque l'on dev pour Android on doit savoir que https://www.youtube.com/watch?v=Hzs6OBcvNQE[les enums sont à proscrire] et du coup c'est embêtant, car c'est tout de même bien pratique.
97
+
La parade est donc de passer par une liste de constantes et de créer une nouvelle annotation qui limitera les valeurs attendues, comme ceci :
98
98
99
99
[source,java]
100
100
-----
@@ -112,7 +112,7 @@ public @interface Trooper {
112
112
}
113
113
-----
114
114
115
-
Et ensuite d'uiliser cette annotation a chaque fois que seulement une des valeurs précédent est autorisée.
115
+
Et ensuite d'utiliser cette annotation à chaque fois que seulement une des valeurs précédente est autorisée.
116
116
117
117
[source,java]
118
118
-----
@@ -147,7 +147,7 @@ Une variante `@FloatRange` est aussi disponible.
147
147
# Lint
148
148
149
149
Comme chacune des erreurs n'empèche pas la compilation du projet, un bon moyen de surveiller qu'il n'y a pas de violation aux règles mises en place grâce à toutes ces annotations,
150
-
est de controler les rapports générés par lint
150
+
est de contrôler les rapports générés par lint
151
151
152
152
{lt}div style="text-align : center"{gt}
153
153
{lt}a class="inlineBoxes" href="/images/posts/2016-09_AndroidAnnotations/android_annotations_lint.png" data-lightbox="1" title="Exemple de rapport lint"{gt}
0 commit comments