public class Entry {
private Object value1;
private Object value2;
public Entry(Object value1, Object value2) {
this.value1 = value1;
this.value2 = value2;
}
public Object getValue1() {
return value1;
}
public Object getValue2() {
return value2;
}
}
Entry entry = new Entry(1, "Egor");
System.out.println(entry.getValue1()); // 1
System.out.println(entry.getValue2()); // "Egor"
String name = entry.getValue2();
System.out.println("User's name is = " + name);
// => java.lang.Object cannot be converted to java.lang.String
public class IntegerStringEntry {
private int value1;
private String value2;
public IntegerStringEntry(int value1, String value2) {
this.value1 = value1;
this.value2 = value2;
}
public int getValue1() {
return value1;
}
public String getValue2() {
return value2;
}
}
IntegerStringEntry integerStringEntry = new IntegerStringEntry(1, "Max");
String name = integerStringEntry.getValue2(); // "Max"
int id = integerStringEntry.getValue1(); // 1
System.out.println("User with id = " + id + " has name = " + name);
// => User with id = 1 has name = Max
public class GEntry<T> {
private int value1;
private T value2;
public GEntry(int value1, T value2) {
this.value1 = value1;
this.value2 = value2;
}
public int getValue1() {
return value1;
}
public T getValue2() {
return value2;
}
}
GEntry<String> gEntry = new GEntry<>(1, "Egor");
String name = gEntry.getValue2();
System.out.println("Name from generic is = " + name);
// => Name from generic is = Egor
// работает и для классов, которые мы создадим потом,
// в отличие от boilerplate-ов
Date egorBirthDate = new Date(-1000000L);
User user = new User("Egor", egorBirthDate);
GEntry<User> userGEntry = new GEntry<>(1, user);
System.out.println(userGEntry.getValue1()); // => 1
public class Util {
/**
* Никто не запрещает передавать List (любую коллекцию) в качестве аргумента метода.
* @param users
* @return users amount
*/
public static int getAmountOfUsers(List<User> users) {
return users.size();
}
public static int getAmountOfBooks(Map<String, List<String>> map) {
int result = 0;
for (Map.Entry<String, List<String>> authorAndBooks: map.entrySet()) {
result = result + authorAndBooks.getValue().size();
}
return result;
}
/**
* Нельзя без <T>.
* Обобщенные классы — это хорошо, но что если нам в одном классе нужны разные generics
* @param list
* @param element
* @param <T>
* @return element index
*/
public static <T> int findElementIndex(List<T> list, T element) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).equals(element)) {
return i;
}
}
return 0;
}
}
List<User> users = new ArrayList<>();
users.add(new User("Egor", new Date()));
users.add(new User("Max", new Date(-10000L)));
Util.getAmountOfUsers(users); // 2
Map<String, List<String>> authorAndBooksMap = new HashMap<>();
List<String> booksPushkin = new ArrayList<>();
booksPushkin.add("Золотая рыбка");
booksPushkin.add("Евгений Онегин");
authorAndBooksMap.put("Пушкин", booksPushkin);
List<String> booksTolstoy = new ArrayList<>();
booksTolstoy.add("Война и мир");
booksTolstoy.add("Анна Каренина");
authorAndBooksMap.put("Толстой", booksTolstoy);
System.out.println(
"Всего мы храним " + Util.getAmountOfBooks(authorAndBooksMap) + " книг"
);
// => Всего мы храним 4 книг
// Обобщенные методы
List<User> userList = new ArrayList<>();
User user1 = new User("Egor", new Date());
User user2 = new User("Boris", new Date());
userList.add(user1);
userList.add(user2);
//int index= Util.<User>findElementIndex(userList, user2);
int index = Util.findElementIndex(userList, user2);
System.out.println("Index of user2 is: " + index);
// => Index of user2 is: 1
Вам ответят команда поддержки Хекслета или другие студенты.
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
Наши выпускники работают в компаниях:
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
Зарегистрируйтесь или войдите в свой аккаунт