Java 实现接口的类的列表

Java 实现接口的类的列表,java,list,class,interface,Java,List,Class,Interface,有没有一种方法可以实现类似的功能 List<Class<? implements MyInterface>> ClassList = new ArrayList<Class<? implements MyInterface>>(); ListList既然您似乎对我解释的方式感兴趣,下面是一个快速实现,以验证它是否可以完成 import java.util.ArrayList; import java.util.List; enum N

有没有一种方法可以实现类似的功能

    List<Class<? implements MyInterface>> ClassList = new ArrayList<Class<? implements MyInterface>>(); 

List
List既然您似乎对我解释的方式感兴趣,下面是一个快速实现,以验证它是否可以完成

import java.util.ArrayList;
import java.util.List;

enum NumberClass
{
  ONE("One"),
  TWO("Two"),
  THREE("Three");

  private final String className;

  NumberClass(String name)
  {
    className = name;
  }

  String getName()
  {
    return className;
  }
}

public class Test
{
  public static void main(String[] args)
  {
    List<NumberClass> numbers = new ArrayList<NumberClass>();

    numbers.add(NumberClass.ONE);
    numbers.add(NumberClass.THREE);
    numbers.add(NumberClass.TWO);
    numbers.add(NumberClass.ONE);
    numbers.add(NumberClass.THREE);
    numbers.add(NumberClass.ONE);
    numbers.add(NumberClass.TWO);

    SomeNumber[] nbs = new SomeNumber[numbers.size()];
    int i = 0;
    for (NumberClass nbC : numbers)
    {
      SomeNumber nb;
      try
      {
         nb = (SomeNumber) Class.forName(nbC.getName()).newInstance ();
         nbs[i++] = nb;
      }
      // Cleanly handle them!
      catch (InstantiationException e) { System.out.println(e); }
      catch (IllegalAccessException e) { System.out.println(e); }
      catch (ClassNotFoundException e) { System.out.println(e); }
    }
    for (SomeNumber sn : nbs)
    {
      System.out.println(sn.getClass().getName() + " " + sn.getValue());
    }
  }
}

// The following must be in their own files, of course
public interface SomeNumber
{
  int getValue();
}

public class One implements SomeNumber
{
  public int getValue() { return 1; }
}
public class Two implements SomeNumber
{
  public int getValue() { return 2; }
}
public class Three implements SomeNumber
{
  public int getValue() { return 3; }
}
import java.util.ArrayList;
导入java.util.List;
枚举数类
{
一个(“一”),
两个(“两个”),
三个(“三”);
私有最终字符串类名;
NumberClass(字符串名称)
{
className=名称;
}
字符串getName()
{
返回类名;
}
}
公开课考试
{
公共静态void main(字符串[]args)
{
列表编号=新的ArrayList();
编号。添加(编号类别1);
编号。添加(编号类别三);
编号。添加(编号类别2);
编号。添加(编号类别1);
编号。添加(编号类别三);
编号。添加(编号类别1);
编号。添加(编号类别2);
SomeNumber[]nbs=新的SomeNumber[numbers.size()];
int i=0;
用于(编号类别nbC:编号)
{
若干nb;
尝试
{
nb=(SomeNumber)Class.forName(nbC.getName()).newInstance();
nbs[i++]=nb;
}
//干净利落地处理它们!
catch(实例化异常e){System.out.println(e);}
catch(IllegalAccessException e){System.out.println(e);}
catch(ClassNotFoundException e){System.out.println(e);}
}
对于(序号:nbs)
{
System.out.println(sn.getClass().getName()+“”+sn.getValue());
}
}
}
//当然,以下内容必须在他们自己的文件中
公共接口数
{
int getValue();
}
公共类1实现了一些数字
{
public int getValue(){return 1;}
}
公共类2实现了一些数字
{
public int getValue(){return 2;}
}
公共类3实现了一些数字
{
public int getValue(){return 3;}
}

如果它没有回答你的问题,我认为它是教育性的材料,我希望。p> 看起来是一个复杂的方式来达到你的最终目标。也许你可以有一个枚举列表。这些枚举可以给出您想要的类的名称,并且您可以通过反射创建实例。保留toString()方法以显示有用的信息,例如用于调试目的。让我来实现您的目标…您有一个接口
MyInterface
have method
toString
。现在
ClassA实现了MyInterface
&假设类的toString()返回“ClassA”。所以,从hashmap中,您将搜索键“ClassA”的值,它应该是ClassA的类类型。然后你想创建一个返回类类型的实例(在我们的例子中是ClassA)…是这样的吗…?是的,hemu,这是我的目标,但我目前正在搜索PhiLho建议的方法的信息。如果你想实现这一点,你会怎么做呢?非常感谢你帮助PhiLho并花时间编写了一个非常有用的示例代码。我的实现目前仍然使用我上面描述的方法,但当我完成当前任务时,我将明确地更改它。您的解决方案似乎更加专业,再次表示欢迎和感谢
List<Class<? extends MyInterface>> ClassList = new ArrayList<Class<? extends MyInterface>>(); 
import java.util.ArrayList;
import java.util.List;

enum NumberClass
{
  ONE("One"),
  TWO("Two"),
  THREE("Three");

  private final String className;

  NumberClass(String name)
  {
    className = name;
  }

  String getName()
  {
    return className;
  }
}

public class Test
{
  public static void main(String[] args)
  {
    List<NumberClass> numbers = new ArrayList<NumberClass>();

    numbers.add(NumberClass.ONE);
    numbers.add(NumberClass.THREE);
    numbers.add(NumberClass.TWO);
    numbers.add(NumberClass.ONE);
    numbers.add(NumberClass.THREE);
    numbers.add(NumberClass.ONE);
    numbers.add(NumberClass.TWO);

    SomeNumber[] nbs = new SomeNumber[numbers.size()];
    int i = 0;
    for (NumberClass nbC : numbers)
    {
      SomeNumber nb;
      try
      {
         nb = (SomeNumber) Class.forName(nbC.getName()).newInstance ();
         nbs[i++] = nb;
      }
      // Cleanly handle them!
      catch (InstantiationException e) { System.out.println(e); }
      catch (IllegalAccessException e) { System.out.println(e); }
      catch (ClassNotFoundException e) { System.out.println(e); }
    }
    for (SomeNumber sn : nbs)
    {
      System.out.println(sn.getClass().getName() + " " + sn.getValue());
    }
  }
}

// The following must be in their own files, of course
public interface SomeNumber
{
  int getValue();
}

public class One implements SomeNumber
{
  public int getValue() { return 1; }
}
public class Two implements SomeNumber
{
  public int getValue() { return 2; }
}
public class Three implements SomeNumber
{
  public int getValue() { return 3; }
}