通过接口进行Java上传和下传

ufu*_*cuk 2 java interface upcasting

这可能是一个愚蠢的问题,但我需要知道.我有一个界面作为

import com.amazonaws.services.dynamodbv2.AmazonDynamoDBAsync;

public interface AsyncClient extends AmazonDynamoDBAsync{

}
Run Code Online (Sandbox Code Playgroud)

我有一个ClientCreator类,它有该方法

import com.company.clients.AsyncClient;
public class ClientCreator {
        public static AsyncClient getAsyncClient() throws FileNotFoundException, IllegalArgumentException, IOException{
            AmazonDynamoDBAsync client = new AmazonDynamoDBAsyncClient(getCredentials());
            client.setRegion(getRegion());
            return (AsyncClient)client;
        }
        .
        .
        .
Run Code Online (Sandbox Code Playgroud)

这里AmazonDynamoDBAsyncClient实现了AmazonDynamoDBAsync,AsyncClient扩展了AmazonDynamoDBAsync,但是这段代码无法正常工作并抛出

com.amazonaws.services.dynamodbv2.AmazonDynamoDBAsyncClient无法强制转换为com.company.clients.AsyncClient

为什么呢?

Roh*_*ain 12

基本上你有这样的层次结构:

         AmazonDynamoDBAsync 
                  ^
                  |
     -----------------------------
     |                           |
AmazonDynamoDBAsyncClient   AsyncClient 
Run Code Online (Sandbox Code Playgroud)

而你正试图将AmazonDynamoDBAsyncClient实例转换为AsyncClient,这是不可能的.那些是兄弟姐妹.这样说:"苹果"和"香蕉"都是"水果",但"苹果"不是"香蕉".