アプリケーションの背景を取得するために使用する enum クラスを実装しています。このクラスの現在の実装は次のとおりです。
public enum Painters{
/**
* Available painters.
*/
Background(getBackgroundPainter()),
InactiveBackground(getInactiveBackgroundPainter()),
DesktopBackground(getBackgroundPainter());
/**
* The background painter.
*/
private Painter<Component> _painter;
/**
* Constructor will initialize the object.
*/
Painters(Painter<Component> painter){
_painter = painter;
}
/**
* Will return a current painter.
* @return instance of Painter<Component>
*/
public Painter<Component> painter(){
return _painter;
}
private static Painter<Component> getBackgroundPainter(){
MattePainter mp = new MattePainter(Colors.White.alpha(1f));
PinstripePainter pp = new PinstripePainter(Colors.Gray.alpha(0.2f),45d);
return (new CompoundPainter<Component>(mp, pp));
}
private static Painter<Component> getInactiveBackgroundPainter(){
MattePainter mp = new MattePainter(Colors.White.alpha(1f));
GlossPainter gp = new GlossPainter(Colors.Gray.alpha(0.1f), GlossPainter.GlossPosition.BOTTOM);
PinstripePainter pp = new PinstripePainter(Colors.Gray.alpha(0.2f), 45d);
return (new CompoundPainter<Component>(mp, pp, gp));
}
}
私の問題は、ペインターを取得しようとするたびに painter() メソッドを呼び出す必要があることですが、代わりにペインターのタイプを記述することだけを好みます。列挙型で Painter を拡張できれば、おそらく適切な機能が得られると思いましたが、Java では不可能なようです。
public enum Painters extends Painter<Component>
この問題の解決策を知っていますか???
現在、私はこのように使用しています:
Painters.Background.painter();
しかし、私は必要です:
Painters.Background;