Вы можете вернуть -1, только если T
равно Integer
; но тогда это не было бы обобщенно c.
Вам нужно какое-то специальное значение, которое нельзя принять за «реальный» экземпляр T
. Например, вы можете изменить тип возвращаемого значения на Optional<T>
, поэтому вы можете вернуть Optional.empty()
, чтобы указать, что значение не найдено.
public Optional<T> GetValue() {
// ...
if(temp == null)
{
return Optional.empty();
}
// ...
return Optional.of(temp.data);
}
В качестве альтернативы, вы можете предоставьте значение «not found» конструктору вашего класса и верните его, когда что-то не найдено:
class YourClass<T> {
private final T notFoundValue; // Assign in constructor.
// ...
public T GetValue() {
// ...
if(temp == null)
{
return notFoundValue;
}
// ...
return temp.data;
}
}
Но тогда вам нужно быть очень осторожным, чтобы учесть возможность того, что notFoundValue
был возвращен; сделать это явным путем возврата чего-то другого (но связанного) типа в T
, такого как Optional<T>
, - хороший способ гарантировать, что эта обработка имеет место.