Categories:
Audio (13)
Biotech (29)
Bytecode (36)
Database (77)
Framework (7)
Game (7)
General (507)
Graphics (53)
I/O (35)
IDE (2)
JAR Tools (102)
JavaBeans (21)
JDBC (121)
JDK (426)
JSP (20)
Logging (108)
Mail (58)
Messaging (8)
Network (84)
PDF (97)
Report (7)
Scripting (84)
Security (32)
Server (121)
Servlet (26)
SOAP (24)
Testing (54)
Web (15)
XML (322)
Collections:
Other Resources:
commons-collections4-4.2-sources.jar - Apache Commons Collections
commons-collections4-4.2-sources.jar is the source JAR file for Apache Commons Collections 4.2, which
provides additional collection handling functionalities on top of JDK library.
JAR File Size and Download Location:
JAR name: commons-collections4-4.2-sources.jar Target JDK version: 1.7 Dependency: None File size: 708,599 bytes Release date: 08-Jul-2018 Download: Apache Commons Collections
✍: FYIcenter.com
⏎ org/apache/commons/collections4/functors/PrototypeFactory.java
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.commons.collections4.functors; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import org.apache.commons.collections4.Factory; import org.apache.commons.collections4.FunctorException; /** * Factory implementation that creates a new instance each time based on a prototype. * <p> * <b>WARNING:</b> from v4.1 onwards {@link Factory} instances returned by * {@link #prototypeFactory(Object)} will <b>not</b> be serializable anymore in order * to prevent potential remote code execution exploits. Please refer to * <a href="https://issues.apache.org/jira/browse/COLLECTIONS-580">COLLECTIONS-580</a> * for more details. * * @since 3.0 */ public class PrototypeFactory { /** * Factory method that performs validation. * <p> * Creates a Factory that will return a clone of the same prototype object * each time the factory is used. The prototype will be cloned using one of these * techniques (in order): * </p> * * <ul> * <li>public clone method</li> * <li>public copy constructor</li> * <li>serialization clone</li> * </ul> * * @param <T> the type the factory creates * @param prototype the object to clone each time in the factory * @return the <code>prototype</code> factory, or a {@link ConstantFactory#NULL_INSTANCE} if * the {@code prototype} is {@code null} * @throws IllegalArgumentException if the prototype cannot be cloned */ @SuppressWarnings("unchecked") public static <T> Factory<T> prototypeFactory(final T prototype) { if (prototype == null) { return ConstantFactory.<T>constantFactory(null); } try { final Method method = prototype.getClass().getMethod("clone", (Class[]) null); return new PrototypeCloneFactory<>(prototype, method); } catch (final NoSuchMethodException ex) { try { prototype.getClass().getConstructor(new Class<?>[] { prototype.getClass() }); return new InstantiateFactory<>( (Class<T>) prototype.getClass(), new Class<?>[] { prototype.getClass() }, new Object[] { prototype }); } catch (final NoSuchMethodException ex2) { if (prototype instanceof Serializable) { return (Factory<T>) new PrototypeSerializationFactory<>((Serializable) prototype); } } } throw new IllegalArgumentException("The prototype must be cloneable via a public clone method"); } /** * Restricted constructor. */ private PrototypeFactory() { super(); } // PrototypeCloneFactory //----------------------------------------------------------------------- /** * PrototypeCloneFactory creates objects by copying a prototype using the clone method. */ static class PrototypeCloneFactory<T> implements Factory<T> { /** The object to clone each time */ private final T iPrototype; /** The method used to clone */ private transient Method iCloneMethod; /** * Constructor to store prototype. */ private PrototypeCloneFactory(final T prototype, final Method method) { super(); iPrototype = prototype; iCloneMethod = method; } /** * Find the Clone method for the class specified. */ private void findCloneMethod() { try { iCloneMethod = iPrototype.getClass().getMethod("clone", (Class[]) null); } catch (final NoSuchMethodException ex) { throw new IllegalArgumentException("PrototypeCloneFactory: The clone method must exist and be public "); } } /** * Creates an object by calling the clone method. * * @return the new object */ @Override @SuppressWarnings("unchecked") public T create() { // needed for post-serialization if (iCloneMethod == null) { findCloneMethod(); } try { return (T) iCloneMethod.invoke(iPrototype, (Object[]) null); } catch (final IllegalAccessException ex) { throw new FunctorException("PrototypeCloneFactory: Clone method must be public", ex); } catch (final InvocationTargetException ex) { throw new FunctorException("PrototypeCloneFactory: Clone method threw an exception", ex); } } } // PrototypeSerializationFactory //----------------------------------------------------------------------- /** * PrototypeSerializationFactory creates objects by cloning a prototype using serialization. */ static class PrototypeSerializationFactory<T extends Serializable> implements Factory<T> { /** The object to clone via serialization each time */ private final T iPrototype; /** * Constructor to store prototype */ private PrototypeSerializationFactory(final T prototype) { super(); iPrototype = prototype; } /** * Creates an object using serialization. * * @return the new object */ @Override @SuppressWarnings("unchecked") public T create() { final ByteArrayOutputStream baos = new ByteArrayOutputStream(512); ByteArrayInputStream bais = null; try { final ObjectOutputStream out = new ObjectOutputStream(baos); out.writeObject(iPrototype); bais = new ByteArrayInputStream(baos.toByteArray()); final ObjectInputStream in = new ObjectInputStream(bais); return (T) in.readObject(); } catch (final ClassNotFoundException ex) { throw new FunctorException(ex); } catch (final IOException ex) { throw new FunctorException(ex); } finally { try { if (bais != null) { bais.close(); } } catch (final IOException ex) { //NOPMD // ignore } try { baos.close(); } catch (final IOException ex) { //NOPMD // ignore } } } } }
⏎ org/apache/commons/collections4/functors/PrototypeFactory.java
Or download all of them as a single archive file:
File name: commons-collections4-4.2-sources.jar File size: 708599 bytes Release date: 2018-07-08 Download
⇒ Download and Install commons-collections4-4.1-bin.zip
⇐ What Is commons-collections4-4.2.jar
2023-03-28, 41727👍, 0💬
Popular Posts:
What Is commons-net-ftp-2.0.jar? commons-net-ftp-2.0.jar is the JAR file for Apache Commons Net FTP ...
How to display XML element type information with the jaxp\TypeInfoWriter.java provided in the Apache...
maven-core-3.5.4.jar is the JAR file for Apache Maven 3.5.4 Core module. Apache Maven is a software ...
Apache Neethi provides general framework for the programmers to use WS Policy. It is compliant with ...
JRE 8 plugin.jar is the JAR file for JRE 8 Java Control Panel Plugin interface and tools. JRE (Java ...