1

我有一个这样读取的服务接口

package services;

import domain.Items;

public interface IItemsService extends IService {

public final String NAME = "IItemsService";


/** Places items into the database */
public void storeItem(Items items);




/** Retrieves items from the database
 * 
 * @param category
 * @param amount
 * @param color
 * @param type
 * @return
 * @throws ClassNotFoundException 
 */
public Items getItems (String category, float amount, String color, String type) throws ItemNotFoundException, ClassNotFoundException;

}

还有一个看起来像这样的工厂...

package services;
public class Factory {



public Factory(){}



@SuppressWarnings("unchecked")
public IService getService(String name) throws ServiceLoadException {
    try {
        Class c = Class.forName(getImplName(serviceName));
        return (IService)c.newInstance();
    } catch (Exception e) {
        throw new ServiceLoadException(serviceName + "not loaded");
    }
}



private String getImplName (String name) throws Exception {
    java.util.Properties props = new java.util.Properties();
        java.io.FileInputStream fis = new java.io.FileInputStream("properties.txt");
            props.load(fis);
                fis.close();
                return props.getProperty(serviceName);
}
}

这应该很简单 - 但我不断收到两个错误 - IService 无法解析为类型(在工厂和服务上),并且 serviceName 也无法解析为工厂中的变量错误。我知道我错过了一些简单的东西......

4

2 回答 2

1

那么第二个错误很简单:没有一个名为serviceName. 如果你认为有,请指出它的声明。我怀疑您打算使用参数 - 在这种情况下,只需更改参数名称以匹配您尝试使用的名称:

public IService getService(String serviceName) throws ServiceLoadException 

...

private String getImplName (String serviceName) throws Exception

这是一个非常简单的错误——您应该考虑一下您的诊断有哪些让您在自己解决问题时感到失望。(顺便说一句,您还应该更明智地缩进您的代码。)

至于IService失踪 - 我们不知道IService应该在哪里声明,这使得在这方面很难帮助你......

于 2012-06-02T18:26:11.133 回答
1

关于类型错误:如果IService不在包services中,则IItemService无法访问它,您将需要import some.package.name.IService.

第二个答案很简单:在getServiceandgetImplName方法中,参数名为name。在方法主体中,您将其称为serviceName. 您可能应该更改nameserviceName每个。

另一方面,如果您尝试访问实例变量,请注意,在 Java 中,您必须先声明所有实例变量,然后才能访问(读取/写入)它们。您需要像这样修改类:

public class Factory {

    private String serviceName;

    public Factory () {}

    // other code
}
于 2012-06-02T18:26:49.083 回答