我有这个Event类,我想使它更通用,所以我可以返回除User之外的其他类型,是否有一种在这个事件类中自动转换的方法,或者我应该每次在它之外做什么?
你有什么建议吗?
我有什么
public class Event {
protected String name;
protected Pair<String, User> event;
public String getName() {
return event.first;
}
public User getData() {
return event.second;
}
public Event(String name, User data) {
event = Pair.create(name, data);
}
}
我想要什么
public class Event<T> {
protected String name;
protected Pair<String, T> event;
public String getName() {
return event.first;
}
public T getData() {
return event.second; //cast to type
}
public Event(String name, T data) {
event = Pair.create(name, data);
}
}
答案 0 :(得分:1)
当您创建Event<User>
的实例时,T
会自动获得&#34;替换&#34;到User
所以public T getData()
实际上返回了一个用户而且不需要投射
答案 1 :(得分:1)
我不确定您是如何定义Pair
的,但以下工作无需任何强制转换:
public class Pair<F,S>
{
F first;
S second;
public Pair (F first, S second) {
this.first=first;
this.second=second;
}
public static <F,S> Pair<F,S> create (F first, S second) {
return new Pair<F,S> (first,second);
}
}
public class Event<T> {
protected String name;
protected Pair<String, T> event;
public String getName() {
return event.first;
}
public T getData() {
return event.second;
}
public Event(String name, T data) {
event = Pair.create (name, data); // note you can use the Pair constructor directly
// instead of calling the static create method
}
}
例如,可以使用哪个:
Event<Integer> intEvent = new Event<> ("name", 5);
Integer data = intEvent.getData ();