无法解析为某种类型

时间:2012-06-02 18:19:39

标签: java

我有一个读取的服务接口

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也无法在工厂中解析为变量错误。我知道我错过了一些简单的事情......

2 个答案:

答案 0 :(得分:1)

第二个错误很简单:没有名为serviceName 的变量。如果您认为有,请指出其声明。我怀疑你意味着使用参数 - 在这种情况下,只需更改参数名称以匹配您尝试使用的名称:

public IService getService(String serviceName) throws ServiceLoadException 

...

private String getImplName (String serviceName) throws Exception

这是一个非常简单的错误 - 您应该考虑一下您的诊断会让您自己解决这个问题。 (你也应该更明智地缩进你的代码,顺便说一句。)

至于遗漏的IService - 我们不知道IService在哪里宣布,这使得你很难在这方面帮助你......

答案 1 :(得分:1)

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

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

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

public class Factory {

    private String serviceName;

    public Factory () {}

    // other code
}