【发布时间】:2009-01-08 23:39:01
【问题描述】:
我一直在努力定义一个通用接口,但我失败了 达到我想要的。以下是该问题的简化示例。
假设我有一个通用的 Message 类
public class Message<T> {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}
然后我想定义一个传输东西的接口:
public interface Transfer<Message<T>> {
public void send(Message message);
}
问题是编译器不接受这个,老是抱怨 第二个 '
我的计划是使用这个界面,如下所示:
public class Carrier<Message<T>> implements Transfer<Message<T>> {
public void send(Message message) {
T content = message.getContent();
print(content);
}
public static void print(String s) {
System.out.println("The string equals '" + s + "'");
}
public static void print(Integer i) {
System.out.println("The integer equals " + i);
}
public static void main(String[] args) {
Carrier<Message<String>> stringCarrier = new Carrier<Message<String>>();
Message<String> stringMessage = new Message<String>("test");
stringCarrier.send(stringMessage);
Carrier<Message<Integer>> integerCarrier = new Carrier<Message<Integer>>();
Message<Integer> integerMessage = new Message<Integer>(123);
integerCarrier.send(integerMessage);
}
}
我已经进行了一些搜索和阅读(除其他外Angelika's generics faq),但我无法判断这是不可能的,还是我做错了。
2009-01-16 更新:删除了“Thing”而不是“Message”的原始用法(使用它是因为我能够编译而不会出现语法错误界面)。
【问题讨论】:
-
那么这个问题解决了吗?看起来 Jon Skeet 想通了,但您没有将他的答案标记为已接受。