/** Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.*********************/package java.security;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.ObjectStreamField;import java.util.*;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.CopyOnWriteArrayList;/*** A UnresolvedPermissionCollection stores a collection* of UnresolvedPermission permissions.** @see java.security.Permission* @see java.security.Permissions* @see java.security.UnresolvedPermission*** @author Roland Schemers* @since 1.2** @serial include*/final class UnresolvedPermissionCollectionextends PermissionCollectionimplements java.io.Serializable{/*** Key is permission type, value is a list of the UnresolvedPermissions* of the same type.* Not serialized; see serialization section at end of class.*/private transient ConcurrentHashMap<String, List<UnresolvedPermission>> perms;/*** Create an empty UnresolvedPermissionCollection object.**/public UnresolvedPermissionCollection() {perms = new ConcurrentHashMap<>(11);}/*** Adds a permission to this UnresolvedPermissionCollection.* The key for the hash is the unresolved permission's type (class) name.** @param permission the Permission object to add.*/@Overridepublic void add(Permission permission) {if (! (permission instanceof UnresolvedPermission))throw new IllegalArgumentException("invalid permission: "+permission);UnresolvedPermission up = (UnresolvedPermission) permission;// Add permission to map. NOTE: cannot use lambda for// remappingFunction parameter until JDK-8076596 is fixed.perms.compute(up.getName(),new java.util.function.BiFunction<>() {@Overridepublic List<UnresolvedPermission> apply(String key,List<UnresolvedPermission> oldValue) {if (oldValue == null) {List<UnresolvedPermission> v =new CopyOnWriteArrayList<>();v.add(up);return v;} else {oldValue.add(up);return oldValue;}}});}/*** get any unresolved permissions of the same type as p,* and return the List containing them.*/List<UnresolvedPermission> getUnresolvedPermissions(Permission p) {return perms.get(p.getClass().getName());}/*** always returns false for unresolved permissions**/@Overridepublic boolean implies(Permission permission) {return false;}/*** Returns an enumeration of all the UnresolvedPermission lists in the* container.** @return an enumeration of all the UnresolvedPermission objects.*/@Overridepublic Enumeration<Permission> elements() {List<Permission> results =new ArrayList<>(); // where results are stored// Get iterator of Map values (which are lists of permissions)for (List<UnresolvedPermission> l : perms.values()) {results.addAll(l);}return Collections.enumeration(results);}private static final long serialVersionUID = -7176153071733132400L;// Need to maintain serialization interoperability with earlier releases,// which had the serializable field:// private Hashtable permissions; // keyed on type/*** @serialField permissions java.util.Hashtable* A table of the UnresolvedPermissions keyed on type, value is Vector* of permissions*/private static final ObjectStreamField[] serialPersistentFields = {new ObjectStreamField("permissions", Hashtable.class),};/*** @serialData Default field.*//** Writes the contents of the perms field out as a Hashtable* in which the values are Vectors for* serialization compatibility with earlier releases.*/private void writeObject(ObjectOutputStream out) throws IOException {// Don't call out.defaultWriteObject()// Copy perms into a HashtableHashtable<String, Vector<UnresolvedPermission>> permissions =new Hashtable<>(perms.size()*2);// Convert each entry (List) into a VectorSet<Map.Entry<String, List<UnresolvedPermission>>> set = perms.entrySet();for (Map.Entry<String, List<UnresolvedPermission>> e : set) {// Convert list into VectorList<UnresolvedPermission> list = e.getValue();Vector<UnresolvedPermission> vec = new Vector<>(list);// Add to Hashtable being serializedpermissions.put(e.getKey(), vec);}// Write out serializable fieldsObjectOutputStream.PutField pfields = out.putFields();pfields.put("permissions", permissions);out.writeFields();}/** Reads in a Hashtable in which the values are Vectors of* UnresolvedPermissions and saves them in the perms field.*/private void readObject(ObjectInputStream in) throws IOException,ClassNotFoundException {// Don't call defaultReadObject()// Read in serialized fieldsObjectInputStream.GetField gfields = in.readFields();// Get permissions@SuppressWarnings("unchecked")// writeObject writes a Hashtable<String, Vector<UnresolvedPermission>>// for the permissions key, so this cast is safe, unless the data is corrupt.Hashtable<String, Vector<UnresolvedPermission>> permissions =(Hashtable<String, Vector<UnresolvedPermission>>)gfields.get("permissions", null);perms = new ConcurrentHashMap<>(permissions.size()*2);// Convert each entry (Vector) into a ListSet<Map.Entry<String, Vector<UnresolvedPermission>>> set = permissions.entrySet();for (Map.Entry<String, Vector<UnresolvedPermission>> e : set) {// Convert Vector into ArrayListVector<UnresolvedPermission> vec = e.getValue();List<UnresolvedPermission> list = new CopyOnWriteArrayList<>(vec);// Add to Hashtable being serializedperms.put(e.getKey(), list);}}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。