java - 无法从接口(interface)实例化类

标签 java

我正在构建的应用程序中有以下界面:

package sistemata;

public interface PaymentgatewayAdapter
{   
    public String postPayment(String a);
}

下面的类实现了它:

public class PaypalAdapter implements PaymentgatewayAdapter
{
    public String postPayment(String a)
    {

        String payAmount;
        String transactionOutcome;
        String response;
        payAmount = a;

        Paypal_sim systemGN = new Paypal_sim();
        System.out.println("v adaptera" + a);
        //Simulerar att data skickas till externa systemet
        response = systemGN.transferSaleData(payAmount);

        if (response == "OK")
        {
            transactionOutcome = "OK";
        }
        else
        {
            transactionOutcome = "Invalid data sent to MasterCard.";
        }

        return transactionOutcome;
        //------------------------------
    }
}

还有第二个几乎相同的类,称为 Payson,但未使用。 此接口(interface)是 ServicesFactory 的一部分:

package sistemata;

public class ServicesFactory
{
    private static ServicesFactory instance;
    private PaymentgatewayAdapter paymentAdapter;

    private String className2;

    public static synchronized ServicesFactory getInstance()
    {
        instance = new ServicesFactory();
        return instance;
    }


    public PaymentgatewayAdapter getPaymentAdapter(String className2) 
    {
        this.className2 = className2;

        if (paymentAdapter == null)
        {
            try
            {
                paymentAdapter = (PaymentgatewayAdapter)
                        Class.forName(className2).newInstance();
            }
            catch (Exception e)
            {
                System.out.println("ERROR: Cannot instantiate: " +
                        className2 + ".");
                e.printStackTrace();
                System.exit(1);
            }
        }
        return paymentAdapter;  
    }
}

Account类中调用getPaymentAdapter方法,如下所示:

else if (paymentMethod == 0)
{
    System.out.println("The payment method is PayPal INC");
    String className = "PaypalAdapter";
    paymentAdapter = ServicesFactory.getInstance().getPaymentAdapter(className);
}

每当我打电话时:

paymentAdapter = ServicesFactory.getInstance().getPaymentAdapter(className);

我收到 System.out.println("ERROR: Cannot instantiate:.) 中引发的错误 无论我尝试什么,我都无法解决这个问题,也找不到解决方案。我将感谢您对这段代码的帮助,甚至是硬编码的建议。

java.lang.ClassNotFoundException: PaymentgatewayAdapter
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at sistemata.ServicesFactory.getPaymentAdapter(ServicesFactory.java:26)
    at sistemata.Account.makePayment(Account.java:56)
    at sistemata.MainSystem.main(MainSystem.java:71)

最佳答案

您是否忘记了这一行中的包名称?

String className = "PaypalAdapter";

应该是

String className = "sistemata.x.y.z.PaypalAdapter";

关于java - 无法从接口(interface)实例化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20004851/

相关文章:

java - 我可以在 kotlin 语言中使用 java 公共(public)数学库吗?

java - java中的套接字服务器

java - java中设置jtable的下一列的数据

java - 无法在单台机器上运行的多个 jar 中共享单例实例

java - Java 异步如何工作?异步方法似乎没有异步运行

java - 将文件(在另一个方法中创建)调用到后面的方法中

java - 将 XML 文件转换为字符串,无需在 Java 中进行操作或优化

java - JAXB和Hibernate3非法访问的问题

java - Java中的匿名成员类

java - 类的每个实例是否都有线程池