001/** 002 * 003 * Copyright 2019 Florian Schmaus 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.jxmpp.util; 018 019import java.lang.reflect.Array; 020 021public class ArraysUtil { 022 023 /** 024 * Concatenate two arrays. 025 * 026 * @param arrayOne the first input array. 027 * @param arrayTwo the second input array. 028 * @param <T> the type of the arrays. 029 * @return a new array where the first and second array are concatenated. 030 */ 031 public static <T> T concatenate(T arrayOne, T arrayTwo) { 032 if (!arrayOne.getClass().isArray() || !arrayTwo.getClass().isArray()) { 033 throw new IllegalArgumentException(); 034 } 035 036 int arrayOneLength = Array.getLength(arrayOne); 037 int arrayTwoLength = Array.getLength(arrayTwo); 038 039 @SuppressWarnings("unchecked") 040 T res = (T) Array.newInstance(arrayOne.getClass().getComponentType(), arrayOneLength + arrayTwoLength); 041 System.arraycopy(arrayOne, 0, res, 0, arrayOneLength); 042 System.arraycopy(arrayTwo, 0, res, arrayOneLength, arrayTwoLength); 043 044 return res; 045 } 046 047}