编辑:要明确我不会问如何在java中使用枚举.我问的是,java中是否存在与枚举中的Swifts关联值互补的内容.这不仅仅是如何在枚举上存储值.看看我提供的示例,您将看到不同之处.
因此,iOS开发人员向我展示了一个架构,他使用了swifts枚举关联值.这个概念对我来说似乎很有趣我作为一个Android开发人员,我很好奇,看看它是否可能在java中而不是过于冗长.Java枚举的等价物是什么?还是不可能?
enum Barcode {
case UPCA(Int, Int, Int, Int)
case QRCode(String)
}
// Instantiated
var productBarcode = Barcode.UPCA(8, 85909, 51226, 3)
// or
productBarcode = .QRCode("ABCDEFGHIJKLMNOP")
switch productBarcode {
case .UPCA(let numberSystem, let manufacturer, let product, let check):
println("UPC-A: \(numberSystem), \(manufacturer), \(product), \(check).")
case .QRCode(let productCode):
println("QR code: \(productCode).")
}
Run Code Online (Sandbox Code Playgroud)
Sub*_*mal 13
对于使用Java枚举的我来说,这是不可能的.
如您已经假设的那样,要接近您发布的代码片段,您将会很详细.
枚举
enum BarcodeType {
UPCA,
QRCode,
UNDEFINED;
}
Run Code Online (Sandbox Code Playgroud)
工厂类
abstract class Barcode {
abstract public BarcodeType getType();
public static final Barcode newUPCA(int numberSystem, int manufacturer, int product, int check) {
return new BarcodeUPCA(numberSystem, manufacturer, product, check);
}
public static final Barcode newQRCode(String productCode) {
return new BarcodeQRCode(productCode);
}
}
Run Code Online (Sandbox Code Playgroud)
具体实施UPCA
class BarcodeUPCA extends Barcode {
private final int numberSystem;
private final int manufacturer;
private final int product;
private final int check;
public BarcodeUPCA(int numberSystem, int manufacturer, int product, int check) {
this.numberSystem = numberSystem;
this.manufacturer = manufacturer;
this.product = product;
this.check = check;
}
public int getNumberSystem() {
return numberSystem;
}
public int getManufacturer() {
return manufacturer;
}
public int getProduct() {
return product;
}
public int getCheck() {
return check;
}
@Override
public BarcodeType getType() {
return BarcodeType.UPCA;
}
}
Run Code Online (Sandbox Code Playgroud)
具体实现QRCode
class BarcodeQRCode extends Barcode {
private final String productCode;
public BarcodeQRCode(String productCode) {
this.productCode = productCode;
}
public String getProductCode() {
return productCode;
}
@Override
public BarcodeType getType() {
return BarcodeType.QRCode;
}
}
Run Code Online (Sandbox Code Playgroud)
演示应用程序
public class BarcodeMain {
public static void main(String[] args) throws Exception {
List<Barcode> barcodes = new ArrayList<>();
barcodes.add(Barcode.newUPCA(8, 85909, 51226, 3));
barcodes.add(Barcode.newQRCode("foobar"));
for (Barcode barcode : barcodes) {
switch (barcode.getType()) {
case UPCA: {
BarcodeUPCA b = (BarcodeUPCA) barcode;
System.out.printf("UPC-A: %d, %d, %d, %d%n",
b.getNumberSystem(),
b.getManufacturer(),
b.getProduct(),
b.getCheck()
);
break;
}
case QRCode: {
BarcodeQRCode b = (BarcodeQRCode) barcode;
System.out.printf("QR code: %s%n", b.getProductCode());
break;
}
default:
System.err.println("unhandled type: " + barcode.getType());
}
}
}
Run Code Online (Sandbox Code Playgroud)
产量
UPC-A: 8, 85909, 51226, 3
QR code: foobar
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3619 次 |
| 最近记录: |