在属于库的 Java 类中,我有一个字段 size
指示图像的大小。它必须是 int
,但有些值取决于设备,因此其他开发人员可以为其设置各种类型:
- 缩略图(值取决于设备)
- 实际大小(值取决于设备)
- 自定义(任意整数)
我想限制其他开发人员(使用此库)使用一组特定且有意义的选项中的一个选项来设置 size
的值。我的目的是显示 合法选项列表
给开发人员以及类型安全
,例如Enum
。但我认为仅通过 enum
是不可能做到这一点的,所以我创建了一个接口(interface)和一些类:
public interface SizeMode {
}
public enum DevicePreDefinedImageSizeMode implements SizeMode {
THUMBNAIL, REAL_SIZE
}
public enum CustomImageSizeMode implements SizeMode {
CUSTOM_SIZE
}
public abstract class Size {
private final SizeMode mode;
public SizeMode getMode() {
return mode;
}
public abstract int getDownSampleFactor();
protected Size(SizeMode mode) {
this.mode = mode;
}
}
public class DevicePreDefinedImageSize extends Size {
public DevicePreDefinedImageSize(DevicePreDefinedImageSizeMode mode) {
super(mode);
}
@Override
public int getDownSampleFactor() {
throw new UnknownError("????");
}
}
public class CustomImageSize extends Size {
private final int downSampleFactor;
private CustomImageSize(CustomImageSizeMode mode, int downSampleFactor) {
super(mode);
this.downSampleFactor = downSampleFactor;
}
@Override
public int getDownSampleFactor() {
return downSampleFactor;
}
}
现在我可以声明 Size
类的字段 size
并且其他开发人员只能使用 Size
的子类之一并初始化它们使用 THUMBNAIL
、REAL_SIZE
或 CUSTOM_SIZE
。
但是是否有更好的方法来实现我的目的?
最佳答案
另一种选择是使用只能使用一组静态工厂方法(如果需要,也可以使用构建器模式)创建的Size
实现:
public class Size {
private final int sampleFactor;
private Size(int sampleFactor) {
this.sampleFactor = sampleFactor;
}
public static Size thumbnail() {
return new Size(THUMBNAIL_FACTOR);
}
public static Size real() {
return new Size(REAL_FACTOR);
}
public static Size custom(int factor) {
return new Size(factor);
}
}
关于java - 在字段中存储各种类型的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29757383/