import java.util.Arrays; import java.util.Collections; public class Main { public static void main(String[] args) { String[] strings = {"q","w","e"}; GenericArray<String> genericStrArray = new GenericArray<>(strings); System.out.println(Arrays.toString(genericStrArray.getArray())); //Метод Arrays.toString() возвращает строковое представление одномерного массива, // разделяя элементы запятой. Вместо того чтобы перебирать массивы циклом for, можно воспользоваться этим методом для вывода элементов на консоль: genericStrArray.shuffle(); System.out.println(Arrays.toString(genericStrArray.getArray())); Integer[] integers = {1,2,3,4,5}; GenericArray<Integer> intGenericArray = new GenericArray<>(integers); System.out.println(Arrays.toString(intGenericArray.getArray())); intGenericArray.shuffle(); System.out.println(Arrays.toString(intGenericArray.getArray())); } // Ограниченные параметры типа. Возможно, что Вы захотите ограничить // типы, которые можно передавать как параметры типа. Например, метод, // который оперирует с числами, захочет принимать только объекты типа // Number и его подклассов. Это так называемые bounded type parameters. // Для объявления такого типа параметров укажите имя параметра типа, за // ним ключевое слово extends Number. Заметим, что extends используется и для // классов и для интерфейсов. } class GenericArray <T> { private T[] someArray; public GenericArray(T[] someArray) { this.someArray = someArray; } public void shuffle(){ Collections.shuffle(Arrays.asList(someArray)); } public <T> T[] getArray() { return (T[]) someArray; } }