Java 通过接口向上转换和向下转换



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

import com.amazonaws.services.dynamodbv2.AmazonDynamoDBAsync;
public interface AsyncClient extends AmazonDynamoDBAsync{
}

我有一个 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;
        }
        .
        .
        .

在这里,AmazonDynamoDBAsyncClient实现了AmazonDynamoDBAsync,AsyncClient扩展了AmazonDynamoDBAsync,但是此代码不起作用并抛出

com.amazonaws.services.dynamodbv2.AmazonDynamoDBAsyncClient 不能是 投射到 com.company.clients.AsyncClient

为什么呢?

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

         AmazonDynamoDBAsync 
                  ^
                  |
     -----------------------------
     |                           |
AmazonDynamoDBAsyncClient   AsyncClient 

并且您正在尝试将AmazonDynamoDBAsyncClient实例转换为AsyncClient,这是不可能的。他们是兄弟姐妹。这样说:"苹果"和"香蕉"都是"水果",但"苹果"不是"香蕉"。

相关内容

  • 没有找到相关文章

最新更新