Мне нужна жесткая ссылка class в моем коде Java, но, конечно, ее нет.Есть ли какой-нибудь другой способ сделать то, что я хочу, или я должен создать свой собственный класс?
Это дает анонимные классы в методах, где я хочу, чтобы анонимный класс устанавливал возвращаемое значение для метода.
Например, учитывая
interface Greeting {
void greet();
}
Мне нужен код, подобный следующему:
// Does not compile
static void hello(final String who) {
String returnValue;
Greeting hello = new Greeting() {
public void greet() {
returnValue = "hello" + who;
}
};
hello.greet();
System.out.println(returnValue);
}
Я могу подделать его, используя список:
static void hello(final String who) {
final List<String> returnValue = new ArrayList<String>();
Greeting hello = new Greeting() {
public void greet() {
returnValue.add("hello" + who);
}
};
hello.greet();
System.out.println(returnValue.iterator().next());
}
Но я хочу не использовать список.Я могу написать StrongReference
класс, который решает это:
static class StrongReference<T> {
private T referent;
public void set(T referent) {
this.referent = referent;
}
public T get() {
return referent;
}
}
, что делает мой метод более понятным:
static void hello(final String who) {
final StrongReference<String> returnValue = new StrongReference<String>();
Greeting hello = new Greeting() {
public void greet() {
returnValue.set("hello" + who);
}
};
hello.greet();
System.out.println(returnValue.get());
}
Для моего надуманного примера я мог бы greet()
вернуть строку, но я работаю с гораздо более сложными классами, где настройка находится глубоко внутри вызова базы данных, которым управляет базовый класс.У экземпляров есть много разных типов, которые они хотят вернуть, поэтому я только что использовал трюк List
.
Мои вопросы: есть ли лучший способ сделать это?Что не так с моим StrongReference
классом?Кто-нибудь где-нибудь написал StrongReference
в библиотеке?