替换过时的`Hashtable`集合

时间:2014-01-08 23:06:55

标签: java

我有这个简单的ldap客户端,它使用过时的Hashtable集合。

class SAuth {

    public static void main(String[] args) {

        Hashtable env = new Hashtable(11);
        env.put(Context.INITIAL_CONTEXT_FACTORY,
                "com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.PROVIDER_URL, "ldap://xx.xx.xx.xx:yyyy/");

        // Authenticate as S. User and password "mysecret"
        env.put(Context.SECURITY_AUTHENTICATION, "simple");
        env.put(Context.SECURITY_PRINCIPAL, "cn=orcladmin");
        env.put(Context.SECURITY_CREDENTIALS, "password");

        try {

            DirContext ctx = new InitialDirContext(env);
            System.out.println(" i guess the connection is sucessfull :)");

        // Do something useful with ctx 
            // Close the context when we're done
            ctx.close();
        } catch (NamingException e) {
            e.printStackTrace();
        }

    }
}

我是否可以使用任何现代集合而不破坏代码而不是Hashtable?

更新

class tSAuth {

    public static void main(String[] args) {

        Map<String, String> env = new HashMap<String, String>();
        env.put(Context.INITIAL_CONTEXT_FACTORY,
                "com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.PROVIDER_URL, "ldap://xx.xx.xx.xx:yyyy/");

        // Authenticate as S. User and password "mysecret"
        env.put(Context.SECURITY_AUTHENTICATION, "simple");
        env.put(Context.SECURITY_PRINCIPAL, "cn=orcladmin");
        env.put(Context.SECURITY_CREDENTIALS, "password");

        try {

            DirContext ctx = new InitialDirContext((Hashtable<?, ?>) env);
            System.out.println(" i guess the connection is sucessfull :)");

        // Do something useful with ctx 
            // Close the context when we're done
            ctx.close();
        } catch (NamingException e) {
            e.printStackTrace();
        }

    }
}

3 个答案:

答案 0 :(得分:2)

使用HashMap代替HashTable,如下所示:

Map env = new HashMap();

我不确定Context.*的确切类型,但是,如果它是String,那么您可以编写如下代码:

Map<String, String> env = new HashMap<String, String>();

修改

InitialDirContext构造函数的参数类型为Hashtable<?,?>。所以在这种情况下你应该Hashtable。也许你可以像这样编码:

Hashtable<String, String> env = new Hashtable<String, String>();

答案 1 :(得分:1)

答案 2 :(得分:0)

您应该可以在此处使用java.util.Properties,因为它扩展了java.util.Hashtable<Object,Object>