Get: примеры (JAVA)

Примеры использования методов с именем get в Java
Раздел: Коллекции (Collection Framework) - List
get(int index): E

Общее назначение и варианты метода get в Java

В Java слово get чаще всего встречается как часть имени метода и обозначает операцию извлечения значения: геттеры полей, доступ к элементам коллекций и получение системных или конфигурационных свойств. Конкретное поведение зависит от API. Ниже описаны самые распространённые варианты с аргументами и возвращаемыми значениями.

  • Getter (POJO): метод вида public Тип getX(). Аргументы отсутствуют. Возвращает значение поля или вычисленное представление. Может возвращать null для ссылочных типов.
  • java.util.Map.get(K key): аргумент - ключ key типа K. Возвращает значение V, связанное с ключом, или null, если ключа нет или значение было явно установлено в null. Для отличия отсутствующего ключа часто используются containsKey или getOrDefault.
  • java.util.Map.getOrDefault(K key, V defaultValue): возвращает значение для ключа или переданный defaultValue, если ключ отсутствует.
  • java.util.List.get(int index): аргумент - индекс. Возвращает элемент на позиции index. При некорректном индексе бросает IndexOutOfBoundsException.
  • java.util.Optional.get(): аргументов нет. Возвращает содержимое Optional; при пустом Optional бросает NoSuchElementException. Часто предпочтительнее использовать безопасные альтернативы: orElse, orElseGet, orElseThrow, ifPresent.
  • java.util.Properties.getProperty(String key) и System.getProperty(String key): принимают имя свойства. Возвращают значение как строку или null, если свойство не найдено; у getProperty есть перегрузка с дефолтом.

Типы исключений и поведение при null зависят от конкретного метода. При реализации геттеров в классах рекомендуется документировать, может ли метод возвращать null.

Короткие примеры различных вариантов get

Map.get и getOrDefault

import java.util.*;
class E1 {
  public static void main(String[] args) {
    Map m = new HashMap<>();
    m.put("a", "alpha");
    System.out.println(m.get("a"));
    System.out.println(m.get("b"));
    System.out.println(m.getOrDefault("b", "default"));
  }
}
alpha
null
default

List.get с индексом

import java.util.*;
class E2 {
  public static void main(String[] args) {
    List l = Arrays.asList(10,20,30);
    System.out.println(l.get(1));
  }
}
20

Optional.get (опасный вариант)

import java.util.*;
class E3 {
  public static void main(String[] args) {
    Optional o = Optional.of("val");
    System.out.println(o.get());
    Optional empty = Optional.empty();
    // следующий вызов бросит исключение
    // System.out.println(empty.get());
  }
}
val

Геттер в классе (POJO)

class Person {
  private String name;
  public Person(String name) { this.name = name; }
  public String getName() { return name; }
}
class E4 {
  public static void main(String[] args) {
    System.out.println(new Person("Ivan").getName());
  }
}
Ivan

Properties.getProperty

import java.util.*;
class E5 {
  public static void main(String[] args) {
    Properties p = new Properties();
    p.setProperty("k", "v");
    System.out.println(p.getProperty("k"));
    System.out.println(p.getProperty("x", "def"));
  }
}
v
def

Похожие методы в Java и их отличия

  • getOrDefault - возвращает дефолт вместо null, когда ключ отсутствует. Предпочтительнее при желании избежать null.
  • computeIfAbsent - вычисляет и сохраняет значение при отсутствии ключа; удобен для ленивой инициализации кэшей.
  • containsKey - проверяет наличие ключа, полезен когда null может быть допустимым значением.
  • orElse / orElseGet / orElseThrow для Optional - более безопасные альтернативы get().
  • Records (Java 16 и выше) - вместо традиционных геттеров используются авто-сгенерированные аксессоры с именами полей; предпочтительны для неизменяемых данных.

Аналоги в других языках и их особенности

Краткие примеры поведения, аналогичного Map.get или геттерам, в популярных языках.

JavaScript (Map)

const m = new Map([["a","alpha"]]);
console.log(m.get("a"));
console.log(m.get("b"));
alpha
undefined

Python (dict.get)

d = {"a": "alpha"}
print(d.get("a"))
print(d.get("b"))
print(d.get("b", "default"))
alpha
None
default

PHP (массивы)

$a = ["a" => "alpha"];
echo $a["a"]."\n";
echo ($a["b"] ?? "default")."\n";
alpha
default

C# (Dictionary TryGetValue)

using System;
using System.Collections.Generic;
class P{
  static void Main(){
    var d = new Dictionary{{"a","alpha"}};
    if(d.TryGetValue("a", out var v)) Console.WriteLine(v);
    Console.WriteLine(d.ContainsKey("b") ? d["b"] : "default");
  }
}
alpha
default

Go (map lookup)

package main
import "fmt"
func main(){
  m := map[string]string{"a":"alpha"}
  v, ok := m["a"]
  fmt.Println(v, ok)
  v, ok = m["b"]
  fmt.Println(v, ok)
}
alpha true
 false

Kotlin (Map.get и свойства)

fun main(){
  val m = mapOf("a" to "alpha")
  println(m["a"]) // аналог get
  println(m.getOrDefault("b","def"))
}
alpha
def

SQL (SELECT)

-- Получение значения по ключу в таблице
SELECT value FROM table WHERE key = 'a';
(зависит от данных в таблице)

Особенности: в языках без null-safety поведение при отсутствии элемента чаще возвращает null или undefined, в языках с явными конструкциями (Python dict.get, C# TryGetValue, Go - проверка ok) существует явное разделение между «нет значения» и «значение null/пусто».

Типичные ошибки при использовании get и примеры

  • Непонимание возвращаемого null от Map.get. Код:
Map m = new HashMap<>();
String v = m.get("x");
int len = v.length(); // NPE если v == null
Exception in thread "main" java.lang.NullPointerException
    at ...
  • IndexOutOfBounds при List.get. Код:
List l = Arrays.asList(1,2);
System.out.println(l.get(2));
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
    at ...
  • Optional.get на пустом Optional. Код:
Optional o = Optional.empty();
System.out.println(o.get());
Exception in thread "main" java.util.NoSuchElementException: No value present
    at java.util.Optional.get(Optional.java:...)
  • Ошибки приведения типов после извлечения из коллекций с необобщённым типом. Код:
List raw = new ArrayList();
raw.add("str");
Integer x = (Integer) raw.get(0); // ClassCastException
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
    at ...

Рекомендации по предотвращению ошибок: проверять containsKey либо использовать getOrDefault, избегать Optional.get() без проверки, корректно обрабатывать индексы и применять generics.

Изменения, влияющие на поведение методов get в последних версиях Java

  • Java 8: введён Optional, Map.getOrDefault, computeIfAbsent, что изменило подходы к получению и инициализации значений.
  • Java 9+ и далее: эволюция API коллекций не затронула семантику Map.get и List.get, но появились новые фабричные методы для создания коллекций (List.of, Map.of), что меняет подходы к неизменяемым структурам.
  • Java 16: records добавили синтаксические аксессоры вместо привычных геттеров для иммутабельных типов.

Продвинутые и редкие сценарии использования get

Кэширование с использованием computeIfAbsent

Пример java
import java.util.concurrent.*;
import java.util.*;
class Adv1{
  static final ConcurrentMap> cache = new ConcurrentHashMap<>();
  static List load(String key){
    // имитация тяжёлой загрузки
    return Arrays.asList(key+"-1", key+"-2");
  }
  public static void main(String[] args){
    List v = cache.computeIfAbsent("k", Adv1::load);
    System.out.println(v);
    // последующие вызовы вернут уже сохранённый результат
    System.out.println(cache.get("k") == v);
  }
}
[k-1, k-2]
true

Использование getter-методов в Stream API (метод ссылка)

Пример java
import java.util.*;
import java.util.stream.*;
class Person{ private String name; Person(String n){name=n;} public String getName(){return name;} }
class Adv2{
  public static void main(String[] args){
    List ppl = Arrays.asList(new Person("A"), new Person("B"));
    List names = ppl.stream().map(Person::getName).collect(Collectors.toList());
    System.out.println(names);
  }
}
[A, B]

Вызов геттера через Java Beans Introspector

Пример java
import java.beans.*;
import java.lang.reflect.*;
class Bean{ private int x=42; public int getX(){return x;} }
class Adv3{
  public static void main(String[] args) throws Exception{
    Bean b = new Bean();
    for(PropertyDescriptor pd : Introspector.getBeanInfo(Bean.class).getPropertyDescriptors()){
      if("x".equals(pd.getName())){
        Method getter = pd.getReadMethod();
        System.out.println(getter.invoke(b));
      }
    }
  }
}
42

Комбинация Optional и Map.get для безопасного извлечения

Пример java
import java.util.*;
class Adv4{
  public static void main(String[] args){
    Map m = new HashMap<>();
    m.put("a","alpha");
    String res = Optional.ofNullable(m.get("b")).orElse("fallback");
    System.out.println(res);
  }
}
fallback

Пользовательские Map с поведением get по умолчанию (пример: возвращать калькулированное значение)

Пример java
import java.util.*;
class DefaultMap extends HashMap{
  private final V defaultValue;
  DefaultMap(V def){this.defaultValue = def;}
  @Override public V get(Object key){
    return containsKey(key) ? super.get(key) : defaultValue;
  }
  public static void main(String[] args){
    DefaultMap dm = new DefaultMap<>("d");
    dm.put("a","alpha");
    System.out.println(dm.get("a"));
    System.out.println(dm.get("b"));
  }
}
alpha
d

Сценарии: использование computeIfAbsent для многопоточной ленивой инициализации, применение метода ссылки для компактности в потоках, использование Optional для обработки возможного отсутствия значения.

джава get function comments

En
Get Returns the element at the specified position in this list