【发布时间】:2011-11-13 22:18:06
【问题描述】:
我怎样才能有一个引用任何实现一组接口的对象的类型引用?
例如,我可以有一个这样的泛型:
Java:
public class Foo<T extends A & B> { }
C#
public class Foo<T> where T : A, B { }
这就是如何拥有一个类范围的泛型类型。但是,我只想拥有一个引用任何扩展给定接口集的对象的数据成员。
例子:
public class Foo
{
protected <? extends A, B> object;
public void setObject(<? extends A, B> object)
{
this.object = object;
}
}
如果有可能有这种类型的语法,我怎么能在 Java 和 C# 中做到这一点?
我意识到我可以创建另一个接口来扩展所有需要的接口。但是,我不认为这是最优的,因为它不必要地添加了另一种类型,其唯一目的是绕过语法。诚然,这是一个很小的问题,但就优雅而言,它有点令人讨厌。
【问题讨论】:
-
目前正在苦苦挣扎。 Foo.setObject 以何种方式向 A & B 添加更多行为?
-
我举了一个抽象的例子。这是一个更具体的例子:我从事游戏编程,我的主游戏循环有两个主要功能:更新和渲染。在那里,我将调用委托给“gameworld”对象,该对象有自己的渲染和更新方法。只是,我不想强迫我的游戏世界只是特定类的实例。我更愿意将所需的功能拆分为一组接口(在本例中为可更新和可渲染),并且能够使用任何对象来实现所有这些接口。这是一个小问题,但我认为它在优雅方面很重要。
-
为什么不把私有变量声明为
A,或者B?