Похоже, вы этого хотите.
Cow
будет принимать &str
или String
.
use std::borrow::Cow;
#[derive(Debug, Eq, Hash, PartialEq)]
struct Complex<'a> {
n: i32,
s: Cow<'a, str>,
}
impl<'a> Complex<'a> {
fn new<S: Into<Cow<'a, str>>>(n: i32, s: S) -> Self {
Complex {
n: n,
s: s.into(),
}
}
}
fn main() {
let mut m = std::collections::HashMap::<Complex, i32>::new();
m.insert(Complex::new(42, "foo"), 123);
assert_eq!(123, *m.get(&Complex::new(42, "foo")).unwrap());
}
Комментарий о параметрах жизни:
Если вам не нравится параметр lifetime, и вам нужно работать только с &'static str
или String
, тогда вы можете использовать Cow<'static, str>
и удалить другие параметры времени жизни из блока impl и определения структуры.
Вам не нужно создавать Timestamp
s. Вы можете сделать это с помощью Calendar
.
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minute);
if(calendar.before(Calendar.getInstance())) {
calendar.add(Calendar.DATE, 1);
}
alarmManager.set(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), pendingDinnerIntent);
Я бы также упомянул, что с KitKat, если ваш targetSdkVersion
равен 19 или выше, метод AlarmManager#set()
не является точным. Если вы хотите, чтобы ваш будильник срабатывал в определенное время, вам нужно использовать метод setExact*()
.