指定Class参数必须实现特定接口

时间:2017-05-14 14:48:57

标签: java class inheritance interface implements

我正在编写一个传递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

我该如何正确地做到这一点?

2 个答案:

答案 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 */
}