¿Hay una biblioteca existente de que me permite hacer anotaciones en un método Java como @Const, por lo que el compilador (usando apt supongo) marcará un error si se actualiza un campo, o no invoca un método @ Const en un campo ; y anotar un parámetro como @Const, para que el método de aceptación no pueda invocar ninguno de sus métodos que no sean @ Const ni actualizar ninguno de sus campos?Corrección de const en Java utilizando anotaciones?
(Básicamente, se trata de añadir const-corrección de Java utilizando anotaciones; hay algunos detalles obvios que no están cubiertos en la pregunta anterior, como asignar a/desde un parámetro de Const-mecanografiado @, etc.)
Encontré esto: http://confluence.atlassian.com/pages/viewpage.action?pageId=182158080 pero parece que solo está disponible como parte de IDEA.
Tras una solicitud de aclaración a continuación, aquí está el código de ejemplo para mostrar lo que quiero decir:
class Person {
private String name;
private String address;
@Const public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
... etc. for address
}
Ahora, si defino un método como:
void processPerson(@Const Person p)
una línea como: p.getName()
estaría bien en processPerson
, ya que getName
se marcó como un método @Const. Pero llamar a p.setName()
desde dentro de processPerson
se marcará como un error.
Tenga en cuenta que esto es muy diferente de final
: si el parámetro se define como final Person p
, cualquier asignación a p
habría sido ilegal, pero sigue siendo perfectamente válido para modificar lo p
se refiere a (ya sea usando p.setName(...)
o incluso de forma más directa, con p.name = ...
.
¿Intentó utilizar la palabra clave 'final' para este propósito? ¿Qué pasa con eso? – AlexR
un método final es un método que no se puede anular. Eso es diferente. – aioobe
Me refiero no al método final. Me refiero a la discusión final. Sé cuál es el método final :) – AlexR