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);
}
}

これは非常に単純なはずですが、2 つのエラーが発生し続けます。IService は (ファクトリとサービスの両方で) タイプに解決できません。また、ファクトリで serviceName を変数エラーに解決できません。私は単純なものが欠けていることを知っています...

4

2 に答える 2

1

2 番目のエラーは単純です:という変数がありません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

2 番目の答えは簡単です。getServiceandgetImplNameメソッドでは、パラメーターの名前はnameです。メソッド本体では、 として参照していserviceNameます。おそらく、それぞれで に変更する必要nameserviceNameあります。

一方、インスタンス変数にアクセスしようとしている場合、Java では、インスタンス変数にアクセス (読み取り/書き込み) する前に、すべてのインスタンス変数を宣言する必要があることに注意してください。クラスを次のように変更する必要があります。

public class Factory {

    private String serviceName;

    public Factory () {}

    // other code
}
于 2012-06-02T18:26:49.083 に答える