我正在编写一个包含大量枚举的程序,而且我必须经常返回EnumMap的键集.但是EnumMap.keySet()
返回一个Set()
,所以为了得到EnumSet
我想要的,我必须使用一个演员:
EnumMap<SomeEnum, Object> myMap = getMap();
EnumSet<SomeEnum> myEnum = (EnumSet<SomeEnum>) myMap.keySet();
Run Code Online (Sandbox Code Playgroud)
如果我不投,编译器会抱怨类型不匹配; 它无法转换Set<SomeEnum>
为EnumSet<SomeEnum>
.似乎没有必要强制转换它,因为EnumMap的键始终是枚举.有谁知道为什么这个keySet()
方法是这样构造的?我有时认为它可能与EnumSet是一个抽象类有关,但肯定EnumMap
可以返回所EnumSet
提供的工厂方法.
干杯,全部!
编辑:我很抱歉,上面的代码抛出了一个CastClassException
.您可以使用获取EnumSet
EnumSet<SomeEnum> myEnum = EnumSet.copyOf(myMap.keySet());
Run Code Online (Sandbox Code Playgroud)
我真的应该在发布前检查.
所以我说这两个表有相同的列.用你的想象力让它们更大:
USER_COUNTERPARTY:
ID |Name |Credit Rating |Sovereign Risk |Invoicing Type
----+----------------------------+-----------------+------------------+---------------
1 |Nat Bank of Transnistria |7 |93 |Automatic
2 |Acme Ltd. |25 |12 |Automatic
3 |CowBInd LLP. |49 |12 |Manual
TEMP:
ID |Name |Credit Rating |Sovereign Risk |Invoicing Type
----+----------------------------+-----------------+------------------+---------------
2 |Acacacme Ltd. |31 |12 |Manual
4 |Disenthralled Nimrod Corp. |31 |52 |Automatic
Run Code Online (Sandbox Code Playgroud)
我想将它们合并为一个,用第二个替换第一个具有相同ID的内容,并插入不存在的内容.我可以用这句话:
MERGE INTO USER_COUNTERPARTY C
USING TEMP T
ON (C.COUNTER_ID = T.COUNTER_ID)
WHEN MATCHED THEN UPDATE SET
C.COUNTER_NAME = T.COUNTER_NAME,
C.COUNTER_CREDIT = T.COUNTER_CREDIT,
C.COUNTER_SVRN_RISK = T.COUNTER_SVRN_RISK, …
Run Code Online (Sandbox Code Playgroud) 我有一列不同长度的数字,我想用零填充它们,这样它们就像最大的数字一样长.像这样:
SQL> SELECT LPAD(PROD_ID, 5, 0) AS PROD_ID
2 FROM PRODUCTS_TBL;
PROD_
-----
11235
00119
00013
00015
00222
00301
00302
00303
00006
00087
00009
00090
Run Code Online (Sandbox Code Playgroud)
但我不想使用数字5,我想在PROD_ID上使用一个函数,以防它稍后更改.我试过了
SQL> SELECT LPAD(PROD_ID, MAX(LENGTH(PROD_ID)), 0)
2 FROM PRODUCTS_TBL;
Run Code Online (Sandbox Code Playgroud)
但
SELECT LPAD(PROD_ID, MAX(LENGTH(PROD_ID)), 0)
*
ERROR at line 1:
ORA-00937: not a single-group group function
Run Code Online (Sandbox Code Playgroud)
有什么建议?