我正在编写一个传递Class
作为参数的方法,如下所示:
public void doStuff(Class<?> clazz) {
/* do stuff */
}
然后我可以这样调用这个方法:
doStuff(FooBar.class);
如何在编译器级强制执行参数只能是实现特定接口的类?
我尝试了以下内容 -
public <T extends FooInterface> void doStuff(Class<T> clazz) {
/* do stuff */
}
- 但是在以下语句中出现编译器错误:
doStuff(FooBar.class); // FooBar implements FooInterface
我该如何正确地做到这一点?
答案 0 :(得分:1)
我尝试了你的陈述,但似乎有效。请看下面的代码。我不知道确切的类定义,但在这种情况下
using System;
namespace hwapp
{
class Program
{
static void Main(string[] args)
{
objeto c = new Program();
c.numero = 12;
c.titular = "João";
c.saldo = 102;
Console.WriteLine("Número: "+c.numero+"\n");
Console.WriteLine("Titular da conta: "+c.titular+"\n");
Console.WriteLine("Salto: "+c.saldo+"\n");
}
}
}
有效但
t.doStuff(Foo.class)
没有
t.doStuff(Faa.class)
答案 1 :(得分:0)
事实证明我尝试的代码实际上是正确的,并且编译器错误(即Eclipse用红色强调调用)是调用周围缺少try / catch块的结果。
有两种可能的方法可以达到预期的效果:
public <T extends FooInterface> void doStuff(Class<T> clazz) {
/* do stuff */
}
或者,不那么精细:
public void doStuff(Class<? extends FooInterface> clazz) {
/* do stuff */
}