当前位置:  开发笔记 > 编程语言 > 正文

无法定义通用接口

如何解决《无法定义通用接口》经验,为你挑选了1个好方法。

我一直在努力定义一个通用接口,但是我没能达到我想要的效果.以下是该问题的简化示例.

假设我有一个通用的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 "(之所以使用它是因为我能够编译而不会在界面上出现语法错误).



1> Jon Skeet..:

它看起来像你想要的:

public class Carrier, Foo>
    implements Transfer

这样编译器就会知道它thing是a Message,因此会有一个getContent()方法.

您需要将其用作:

Carrier, String>

但是你现在有点断绝了.你正在实现,Transfer但是你正在尝试使用,thing就像Message看看你的send方法一样 - 你用String和Integer调用它.那些类没有getContent()方法.

我怀疑你应该实际应用Transfer>而不是Transfer

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有