0

私の場合は:保存方法ResourceService<T , ID >

public interface IResourceService<T,ID>

public class ResourceService<T , ID> implement IResourceService<T,ID>
{
   public void save(T entity) throws RuntimeException {

    try {
        AsyncServiceSaveRunable<T> task = new
AsyncServiceSaveRunable<T>(getService(),entity);

        this.treadPoolExcutor.submitTask(task);
    } catch (NoSuchMethodException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


   }
}

そして

public class AsyncServiceSaveRunable<T> implements Runnable  {
private IResourceService<?,?> service; //----> this is 
private Method serviceMethod;
private List<T> parameters;

public AsyncServiceSaveRunable(IResourceService<?,?> service,  List<T> parameters){ 
}

public AsyncServiceSaveRunable(IResourceService<?,?> service, T parameter)
                            throws NoSuchMethodException, SecurityException{

    this.service         = service;

    this.parameters = new ArrayList<T>();
    this.parameters.add(parameter);
}
@Override
public void run() {
    try {
        if(this.parameters.size()>1)
            service.saveList(this.parameters);
        else
            service.save( this.parameters.get(0));
    } catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

  }
 }

問題は service.saveList(this.parameters); です。および service.save(...); 間違っている

とにかくそのパラメータを渡す必要がありますか、またはこの種のケースに対処するには別の構造が必要ですか?

ありがとう

-------------- 日食からのエラーメッセージ ------------------------

The method save(capture#7-of ?) in the type IResourceService<capture#7-of ?,capture#8-of ?>
 is not applicable for the arguments (T)
4

1 に答える 1

4

ResourceService<T extends BaseEntity, ...>あなたはから駆り立てられる必要がTありますBaseEntity

public class AsyncServiceSaveRunable<T> T制限はありません。

次に、(無制限の) ジェネリック型を、オブジェクト (またはそれから派生したもの)service.save(this.parameters.get(0));を必要とする関数に渡そうとします。BaseEntity

の型パラメーターがAsyncServiceSaveRunableBaseEntity から派生するように要求することもできます。

public class AsyncServiceSaveRunable<T extends BaseEntity>

更新: エラー メッセージは、 の最初の型パラメーターが でIResourceService必要な型に対して無効であるというものですsave()。以前は、型パラメーターが によって制限されていましたBaseEntryが、この制限はなくなりました。多分あなたは書きたい:IResourceService<? extends BaseEntity, ? extends Serializable>

于 2012-04-16T05:52:28.750 に答える