我一直在努力定义一个通用接口,但是我没能达到我想要的效果.以下是该问题的简化示例.
假设我有一个通用的Message类
public class Message{ private T content; public void setContent(T content) { this.content = content; } public T getContent() { return content; } }
然后我想定义一个用于转移事物的接口:
public interface Transfer> { public void send(Message message); }
问题是编译器不接受这个,并且总是抱怨第二个'<'字符,无论我尝试什么变化.如何指定此接口以使其绑定到泛型类型(基于Message)并且还可以访问参数化类型?
我的计划是使用如下界面:
public class Carrier> implements Transfer > { 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 > stringCarrier = new Carrier >(); Message stringMessage = new Message ("test"); stringCarrier.send(stringMessage); Carrier > integerCarrier = new Carrier >(); Message integerMessage = new Message (123); integerCarrier.send(integerMessage); } }
我已经做了一些搜索和阅读(其中包括Angelika的泛型常见问题),但我无法判断这是不可能的,还是我做错了.
更新2009-01-16:删除了"Thing"的原始用法而不是"Message
它看起来像你想要的:
public class Carrier, Foo> implements Transfer
这样编译器就会知道它thing
是a Message
,因此会有一个getContent()方法.
您需要将其用作:
Carrier, String>
但是你现在有点断绝了.你正在实现,Transfer
但是你正在尝试使用,thing
就像Message
看看你的send
方法一样 - 你用String和Integer调用它.那些类没有getContent()
方法.
我怀疑你应该实际应用Transfer
而不是Transfer