Java泛型自动铸造
我有这个事件类,我想使其更通用,所以我可以返回其他类型,而不仅仅是用户,是否有一种方法在这个事件类内自动铸造,或者我应该每次都在外面做的呢?Java泛型自动铸造
您有什么建议吗?
我有什么
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);
}
}
我不知道你是如何定义的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();
什么,当你创建的一个实例,T
就会自动“取代”以User
所以public T getData()
实际返回的用户和有不需要铸造
这就是我想要的,但是现在'getData()'返回'Object'。我是否缺少什么? –
这就是我创建类 'new Event (eventName,user)' –
@LeonardoDeleon问题在于您创建类的实例的方式。一个正确的实例化类将是Event
没有必要投(但我们没有对' (定义),因为(看来)'second'是类型'T','getData()'是'T'。 –
我没有得到你想要的东西。如果我没有遗漏任何东西,你发布的第二个代码应该可以工作。 –
你为什么认为你需要从“T”到“T”? – f1sh