Java泛型自动铸造

时间:2017-06-12 09:48:40

标签: java generics

我有这个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);
  }
}

2 个答案:

答案 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 ();