1.Annotation庫的簡單介紹
2.@Nullable和@NonNull
3.資源類型註釋
4.類型定義註釋
5.線程註釋
6.RGB顏色紙註釋
7.值範圍註釋
8.權限註釋
9.重寫函數註釋
10.返回值註釋
11.@Keep註釋
12.@SuppressWarnings註解
13.其餘
複製代碼
public class MyProcessor extends AbstractProcessor{
@Override
public synchronized void init(ProcessingEnvironment processingEnvironment){
super.init(processingEnvironment);
}
@Override
public boolean process(Set<? extends TypeElement> set, RoundEnvironment roundEnvironment){
return false;
}
@Override
public Set<String> getSupportedAnnotationTypes(){
return super.getSupportedAnnotationTypes();
}
@Override
public SourceVersion getSupportedSourceVersion(){
return super.getSupportedSourceVersion();
}
}
複製代碼
@Inherited
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.TYPE)
public @interface Test {
//...
}
複製代碼
@Target(METHOD)
@Retention(CLASS)
@ListenerClass(
targetType = "android.view.View",
setter = "setOnClickListener",
type = "butterknife.internal.DebouncingOnClickListener",
method = @ListenerMethod(
name = "doClick",
parameters = "android.view.View"
)
)
public @interface OnClick {
/** View IDs to which the method will be bound. */
int[] value() default { View.NO_ID };
}
複製代碼
interface Energy {
}
class GasEnergy implements Energy {
}
class Car {
Energy energy = new GasEnergy();
}
複製代碼
class Car {
Energy mEnergy;
public Car(Energy energy) {
mEnergy = energy;
}
}
複製代碼
class Car {
Energy mEnergy;
public void setEnergy(Energy energy) {
mEnergy = energy;
}
}
複製代碼
interface EnergyConsumerInterface {
public void setEnergy(Energy energy);
}
class Car implements EnergyConsumerInterface {
Energy mEnergy;
public void setEnergy(Energy energy) {
mEnergy = energy;
}
}
複製代碼
/**
* 播放模式
* -1 播放錯誤
* 0 播放未開始
* 1 播放準備中
* 2 播放準備就緒
* 3 正在播放
* 4 暫停播放
* 5 正在緩衝(播放器正在播放時,緩衝區數據不足,進行緩衝,緩衝區數據足夠後恢復播放)
* 6 正在緩衝(播放器正在播放時,緩衝區數據不足,進行緩衝,此時暫停播放器,繼續緩衝,緩衝區數據足夠後恢復暫停
* 7 播放完成
*/
public @interface CurrentState{
int STATE_ERROR = -1;
int STATE_IDLE = 0;
int STATE_PREPARING = 1;
int STATE_PREPARED = 2;
int STATE_PLAYING = 3;
int STATE_PAUSED = 4;
int STATE_BUFFERING_PLAYING = 5;
int STATE_BUFFERING_PAUSED = 6;
int STATE_COMPLETED = 7;
}
複製代碼
/**
* 經過註解限定類型
* TYPE_IJK IjkPlayer,基於IjkPlayer封裝播放器
* TYPE_NATIVE MediaPlayer,基於原生自帶的播放器控件
*/
@Retention(RetentionPolicy.SOURCE)
public @interface IjkPlayerType {
int TYPE_IJK = 111;
int TYPE_NATIVE = 222;
}
@IntDef({IjkPlayerType.TYPE_IJK,IjkPlayerType.TYPE_NATIVE})
public @interface PlayerType{}
//使用
/**
* 設置播放器類型,必須設置
* 注意:感謝某人建議,這裏限定了傳入值類型
* 輸入值:ConstantKeys.IjkPlayerType.TYPE_IJK 或者 ConstantKeys.IjkPlayerType.TYPE_NATIVE
* @param playerType IjkPlayer or MediaPlayer.
*/
public void setPlayerType(@ConstantKeys.PlayerType int playerType) {
mPlayerType = playerType;
}
複製代碼