Java - 将String转换为接口

时间:2015-11-28 16:22:57

标签: java interface

使用过滤器设计模式。

我有一个Context接口,有实现这个接口的具体类,叫做f.e. BehavioralPurpose和StructuralPurpose。

我目前正在努力实现的是,当我添加CreationalPurpose类并将其作为前端选项提供时,一切都将继续顺利进行(过滤)

我有一个jsp会返回一个像'结构','行为'等

但是现在我需要创建一个StructuralPurpose类的实例。就像Context context= new StructuralPurpose();但我不知道我是否会得到结构性的#39}。或者'行为'我不想通过添加if语句来解决这个问题,主要是因为如果有人会添加一个新的Purpose类,那么这个人就不必在此过滤器中添加另一个if语句。

这可能吗?我在考虑可能有一个名为purposeString的字符串并解决这个问题:

String purpose = purposeString + "Purpose";
Context context = Class.forName(purpose).newInstance();

但这会导致错误说:类型不匹配:无法从捕获#1转换?上下文

这有可能吗?

使用(Context) Class.forName(purpose).newInstance();的强制转换,我将得到一个ClassNotFoundException。这些课程在不同的课程中,不确定这是否重要。这是我使用的代码:

    String behav = "filter.Behavioral";
    String purpo = behav+"Purpose";
    Context behavioral = null;
    try {
        behavioral = (Context) Class.forName(purpo).newInstance();
    } catch (InstantiationException e) {
        System.out.println("\n basically failed");
    } catch (IllegalAccessException e) {
        System.out.println("\n not allowed");
    } catch (ClassNotFoundException e) {
        System.out.println("\n not found");
    }

仅用于测试目的,此代码将返回' not found'。

1 个答案:

答案 0 :(得分:0)

一般来说,允许用户动态创建这样的对象并不是一个好习惯,除非你的情况有限并且您可以完全控制所有方面和可能的例外情况 无论如何,如果你有足够的理由这样做,你只需要施展它:

try
{

    String purpose = "com.path.to.your.package." + purposeString + "Purpose";
    Context context = (Context) Class.forName(purpose).newInstance();
}
catch(ClassNotFoundException ex)
{
    ex.printStackTrace();
}