2017-10-06 4 views
1

Intellijは赤い下線を表示します。
赤い下線にマウスオーバーすると、このメッセージが表示されます。あなたのコードが実行時にいくつかのフレームワーク(例えば春または休止状態)によってサブクラス化され からクラスを防止するとき「@Async」で注釈を付け'@Async'で注釈を付けられたメソッドは、オーバーライド可能である必要があります。

方法は

は例を報告オーバーライドでなければなりません

このエラーを取り除くために何をすべきですか?
赤い下線が表示されます。コンパイルエラーがなくても動作します。

私はIntellij 2017.2.5を使用しています。

@Async 
private void deleteFile(String fileName, String path) { 
    BasicAWSCredentials credentials = new BasicAWSCredentials(AWS_ACCESS_KEY, AWS_SECRET_KEY); 
    AmazonS3 s3client = AmazonS3ClientBuilder.standard().withRegion("ap-northeast-2").withCredentials(new AWSStaticCredentialsProvider(credentials)).build(); 

    try { 
     s3client.deleteObject(new DeleteObjectRequest(AWS_BUCKET_NAME, path + fileName)); 
    } catch (AmazonServiceException ase) { 
     System.out.println("Caught an AmazonServiceException."); 
     System.out.println("Error Message: " + ase.getMessage()); 
     System.out.println("HTTP Status Code: " + ase.getStatusCode()); 
     System.out.println("AWS Error Code: " + ase.getErrorCode()); 
     System.out.println("Error Type:  " + ase.getErrorType()); 
     System.out.println("Request ID:  " + ase.getRequestId()); 
    } catch (AmazonClientException ace) { 
     System.out.println("Caught an AmazonClientException."); 
     System.out.println("Error Message: " + ace.getMessage()); 
    } 
} 
+0

マークメソッド 'protected'または' public'をし、クラスが最終ではないことを確認してください。

あなたは方法は、次のコードとしてのSpringによって管理Beanで呼ばれているように、あなたのコードをリファクタリングする必要があります。メッセージが言うように。 –

+0

@RoddyoftheFrozenPeas私が 'protected'または' public'に変更すると、intellijは黄色い背景の 'Access can be private'メッセージを表示します。 – chooco13

+0

このシナリオでは、IntelliJのようなものはバグです。この問題をサポートチームに提出しましたか? –

答えて

1

エラーprivateprotected CQでなければならないことを示しています。 public、非同期のため。

この方法は、非同期ツールでは使用されていません。実際にあなたがしていることを知っていることを伝えるだけで、SuppressWarningsを追加してください。

@Async 
@SuppressWarnings("WeakerAccess") 
protected void deleteFile(String fileName, String path) { 

IntelliJチームにヒントをドロップすることがあります。

1

@Asyncは、このメソッドを非同期的に実行するためのSpringへの指示です。だから、唯一のいくつかの条件で動作することができます:

  1. クラスは、メソッドがメソッドpublic
  2. なければならない春
  3. によって管理されなければならないためのバネ

を使用して呼び出す必要があります後者の場合、このメソッドをクラス内で直接呼び出すように見えるので、Springはこのメソッドを呼び出したことを知る方法がありません。これはhtatの魔法ではありません。

@Service 
public class AsyncService { 
    @Async 
    public void executeThisAsync() {...} 
} 

@Service 
public class MainService { 
    @Inject 
    private AsyncService asyncService; 

    public mainMethod() { 
     ... 
     // This will be called asynchronusly 
     asyncService.executeThisAsync(); 
    } 
    ... 
} 
関連する問題