gpt4 book ai didi

Java枚举类

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:22:32 26 4
gpt4 key购买 nike

我正在实现枚举类,我将使用它来检索应用程序中的一些背景,此类的当前实现在这里:

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;

最佳答案

你总是可以将你的画家定义为一个接口(interface),并让你的枚举实现它。您将无法使用通用通配符,但只要这不是约束,您也可以按照您想要的方式在代码中引用画家:

interface Painter<T> {
// ...
}

public enum Painters implements Painter<Component> {
Background(getBackgroundPainter()),
InactiveBackground(getInactiveBackgroundPainter()),
DesktopBackground(getBackgroundPainter());

private Painter<Component> _painter;

// ...
}

Painter somePainter = Painters.Background;

您的枚举将有效地代理实际的 painter 实现。

关于Java枚举类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10371881/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com