Brug af annotations
Hej EksperterSå jeg er igang med at lære at bruge Java annotations, i praksis.
Og det gør jeg ved et Projekt jeg har, i at omskrive noget af mit VB.NET kode, til Java kode.. jeg har ikke brugt .NET attributter, da jeg gik lidt død i at forstå dem.
så jeg tænkte jeg først ville lære at bruge Annotations i Java, siden de næsten bruger samme ord for det meste.
Mit Projekt er en Client, til et fjernlog-system.
Den har 988 forskellige typer pakker.
Jeg har en klasse for hver type pakke, extended fra en meget Bred klasse, som har et Interface tilsluttet.
Package(0-987)<-AbstractPackage<-IPackage
alle pakker har deres egen måde at genkende deres byte-array, som gjorde hele projektet specielt svært.
Jeg tænker at gøre det samme i Java, nu hvor jeg har identificeret de fleste pakkers sammenkædning, er sværheden os overstået, da jeg har brugt næsten 1 månede alene på at reverse engineer alle pakker, da Protocollen ikke har nogen dokumentation, eller køre efter nogen standarter.
efter hvad jeg kan se, ville annotations være perfekte til at tilføje en måde at lave mine Package's klasser mere Meta. og jeg overvejer at begynde at bruge det mere, dog er den dokumentation jeg har fundet på annotations meget begrænset.
http://www.codeproject.com/Articles/272736/Understanding-Annotations-in-Java
Som mest bare fortæller jeg kan bruge det til at undlade løse variabler i mine classer, og lade min compiler bruge tid på dem.
Denne kode er min "legekode" jeg har vel ikke misforstået brugen af annotations?
Serve.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package serve;
/**
*
* @author arbejde
*/
public class Serve {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
IPackage pkg = new Package188();
pkg.Debug();
}
}
IPackage.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package serve;
/**
*
* @author arbejde
*/
public interface IPackage {
public Integer getPackageNumber(); //Package Number
public Integer getPackageInfo(); //Info for PackageType
public Integer getPackageType(); //Package Type in a integer number
public String getMessage(); //Getting Readable Message
public Integer getSize(); //Getting size of Package
public Object[] getOptions(); //Getting additional Objects
public void Debug();
}
AbstractPackage.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package serve;
import java.lang.annotation.Annotation;
/**
*
* @author arbejde
*/
public abstract class AbstractPackage implements IPackage{
public AbstractPackage() {
}
public abstract void ReadData(byte[] bytes);
@Override
public Integer getPackageNumber() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public Integer getPackageInfo() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public Integer getPackageType() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public String getMessage() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public Integer getSize() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public Object[] getOptions() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
protected PackageType getMeta(){
Class c = this.getClass();
return (PackageType)c.getAnnotation(PackageType.class);
}
}
PackageType.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package serve;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
*
* @author arbejde
*/
@Retention(RetentionPolicy.RUNTIME)
public @interface PackageType {
public String name() default "Unknown";
public int number() default 0;
public int[] version() default {1,0,0};
}
Package188.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package serve;
/**
*
* @author arbejde
*/
@PackageType(name = "CallEventPackage",number = 188,version = {1,0,2})
public class Package188 extends AbstractPackage{
@Override
public void ReadData(byte[] bytes) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
public void Debug(){
PackageType pt = getMeta();
System.out.println(pt.name());
}
}