如何引用具有多个边界的通用返回类型。

13 浏览
0 Comments

如何引用具有多个边界的通用返回类型。

我最近发现可以声明一个同时受接口约束的返回类型。考虑以下类和接口:

public class Foo {
    public String getFoo() { ... }
}
public interface Bar {
    public void setBar(String bar);
}

我可以像这样声明一个返回类型:

public class FooBar {
    public static  T getFooBar() {
        //一些返回 Foo 对象的实现,
        //该对象必须实现 Bar 接口
    }
}

如果我从某处调用该方法,我的IDE会告诉我返回类型具有方法 `String getFoo()` 和 `setBar(String)`,但只有在我在函数后面加上圆点时才会显示可用的方法:

FooBar.getFooBar(). // 这里IDE会显示可用的方法。

有没有办法获取这样一个对象的引用?我的意思是,如果我做类似这样的事情:

// bar 只有 setBar(String) 方法
Bar bar = FooBar.getFooBar();
// foo 只有 getFoo():String 方法
Foo foo = FooBar.getFooBar();

我想要有一个引用,类似于这样(伪代码):

 fooBar = FooBar.getFooBar();
// 或者
$1Bar bar = FooBar.getFooBar();
// 或者
Foo&Bar bar = FooBar.getFooBar();

在Java中是否有可能实现这样的功能,还是我只能声明返回类型?我认为Java也必须对其进行类型标注。我不想使用像下面这样的包装器,因为感觉像是作弊:

public class FooBarWrapper extends Foo implements Bar {
    public T foobar;
    public FooBarWrapper(T val){
        foobar = val;
    }
    @Override
    public void setBar(String bar) {
        foobar.setBar(bar);
    }
    @Override
    public String getFoo() {
        return foobar.getFoo();
    }
}

Java真的发明了这样一个很好的特性,但忘了人们可能希望有一个对它的引用吗?

0