小编jal*_*ezp的帖子

为什么EnumMap <T> .keySet()返回Set <T>()而不是EnumSet <T>()?

我正在编写一个包含大量枚举的程序,而且我必须经常返回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)

我真的应该在发布前检查.

java

13
推荐指数
1
解决办法
522
查看次数

如何在不命名所有列的情况下合并两个表?

所以我说这两个表有相同的列.用你的想象力让它们更大:

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 oracle

7
推荐指数
1
解决办法
1万
查看次数

LPAD是具有该列的MAX LENGTH的列

我有一列不同长度的数字,我想用零填充它们,这样它们就像最大的数字一样长.像这样:

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)

有什么建议?

sql oracle

1
推荐指数
1
解决办法
2314
查看次数

标签 统计

oracle ×2

sql ×2

java ×1