有没有办法在python中定义android / Java中的函数字典?

时间:2016-10-13 06:55:41

标签: java android python dictionary

在python中,可以创建函数字典(foo,bar)并通过访问字典元素来调用它们:

d = {'a':foo, 'b':bar}
d[val]()

在此示例中,如果var='a'调用了函数foo,并且var='b'调用了函数bar(其他选项会导致错误)。

我可以在android / Java中做类似的事吗?

3 个答案:

答案 0 :(得分:0)

这在Python中很容易,因为方法是First-Class Citizens。而在Java中,它们不是。

在Java 8中 - 您可以创建Map的{​​{1}}(在本例中为HashMap

Runnable

然后运行它

Map<Character, Runnable> methods= new HashMap<>();
methods.put('help', () -> System.out.println("Help"));

你也可以用反射做,但代码看起来非常像这样。

答案 1 :(得分:0)

UPDATE TMP_OP_USPORTCALLS_RPT 
SET CARGO_QTY =  ( 
    SELECT A.CARGO_QUANTITY FROM ( 
        SELECT CASE WHEN (SUM(NVL(QUANTITY,0))) > 0 THEN ROUND(SUM(NVL(QUANTITY,0))) END AS CARGO_QUANTITY 
        FROM OP_POSITION_CARGO 
        WHERE COMPANY_ID = 2 
        AND SHIP_ID = '380' 
        AND COMMODITY_ID = 816 
        AND KEY_POSITION = (
            SELECT KEY_POSITION 
            FROM OP_POSITION_DETAILS 
            WHERE COMPANY_ID = 2 AND SHIP_ID = '380' AND VOYAGE_NO = 152 
            AND KEY_POSITION = 800892 
            AND EVENT_ID = ( 
                SELECT EVENT_ID    
                FROM MA_EVENT 
                WHERE COMPANY_ID = 2 AND UPPER(EVENT_NAME) LIKE 'LOAD%'
            ) 
        ) 
        GROUP BY KEY_POSITION, COMMODITY_ID,UNIT_CODE 
    ) A) 
WHERE COMPANY_ID = 2 AND SHIP_ID = '380' AND VOYAGE_NO = 152 
AND KEY_POSITION = 800892 AND COMMODITY_ID = 816 AND QUERY_ID = '1476272548543'

答案 2 :(得分:-1)

在Java Dictionaries中,我们将其称为HashTable / HashMap。

请看一下这个课程。 https://developer.android.com/reference/java/util/Hashtable.html

HashTable示例: https://www.tutorialspoint.com/java/java_hashtable_class.htm

https://developer.android.com/reference/java/util/HashMap.html

希望这会对你有所帮助:)。