有什么办法可以使Java中的Enum接受不同数量的参数,从而无需使用varargs来实现这一点。
<div class="table-responsive">
<table id="corporate" class="table table-bordered report-table " style="width:100%">
<thead>
<tr>
<th style="width:200px;" (click)="coporateCustomerSortBy('name')">
<div class="disp-blk-2"> Name <span *ngIf="sortType == 'name' && !sortReverse" class="fas fa-sort-amount-up"></span>
<span *ngIf="sortType == 'name' && sortReverse" class="fas fa-sort-amount-down"></span></div>
</th>
<th style="width:200px;" (click)="coporateCustomerSortBy('location')">
<div class="disp-blk-2" >Location <span *ngIf="sortType == 'location' && !sortReverse" class="fas fa-sort-amount-up"></span>
<span *ngIf="sortType == 'location' && sortReverse" class="fas fa-sort-amount-down"></span></div>
</th>
<th style="width:200px;" (click)="coporateCustomerSortBy('website')">
<div class="disp-blk-2">Website <span *ngIf="sortType == 'website' && !sortReverse" class="fas fa-sort-amount-up"></span>
<span *ngIf="sortType == 'website' && sortReverse" class="fas fa-sort-amount-down"></span></div>
</th>
<th style="width:200px;">
<div class="disp-blk-2">Phone Number</div>
</th>
<th style="width:200px;">
<div class="disp-blk-2">No. of Facilities</div>
</th>
<th style="width:200px;" (click)="coporateCustomerSortBy('venue')">
<div class="disp-blk-2">Venue Name <span *ngIf="sortType == 'venue' && !sortReverse" class="fas fa-sort-amount-up"></span>
<span *ngIf="sortType == 'venue' && sortReverse" class="fas fa-sort-amount-down"></span></div>
</th>
<th style="width:200px;">
<div class="disp-blk-2">Options</div>
</th>
</tr>
</thead>
<tbody>
此处,LITERAL和NUMBER仅接受一个参数,即目标值,而DATE实例接受两个参数。我经历了几个问题,才发现使用泛型无法实现这一点,因为枚举实际上并没有真正支持泛型。
此外,从设计的角度来看,我是否可以不将所有类型都包含在Enum中,而是将它们包含在具有某些变通方法的类中,请记住,需要从json解组此ValueType实例,并且将调用getRepresentation方法在未编组的枚举实例上获取目标值的实际表示形式。
答案 0 :(得分:0)
这是不可能的,因为LITERAL,NUMBER和DATE符合枚举ValueType的接口。如果可能的话,这里将违反类型安全性:
LITERAL()
{
@Override
String getRepresentation(String args) {
return MvelStringUtil.representAsLiteral(arg);
}
}
...
ValueType x = ValueType.LITERAL;
x.getRepresentation("a","b"); // the compiler could not know whether this is syntactically correct
答案 1 :(得分:0)
正如其他答案所说,这是不可能的。 目标是确保给定类型的参数个数不会错误,以便调用代码中的错误很快会出现,对吗?
我将在每个getRepresentation方法实现中使用简单的验证。检查数组长度,如果不正确,请抛出异常。
这样,有效性规则将保持在靠近主题的位置,这是可读的。您不会在编译时就知道错误,但是至少您会在运行时更早地知道它们。
广告设计的观点-我会列举一下。类型的数量是有限的,在编译时就知道了,通过对枚举的快速检查,每个人都会知道那里存在什么可能性...