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>>();
ListList既然您似乎对我解释的方式感兴趣,下面是一个快速实现,以验证它是否可以完成
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 methodtoString
。现在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; }
}