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
но почему?
1 ответ
Решение
По сути, у вас есть такая иерархия:
AmazonDynamoDBAsync
^
|
-----------------------------
| |
AmazonDynamoDBAsyncClient AsyncClient
И вы пытаетесь разыграть AmazonDynamoDBAsyncClient
экземпляр для AsyncClient
, что невозможно. Это братья и сестры. Возьмите это так: "Яблоко" и "Банан" оба являются "Фруктами", но "Яблоко" - это не "Банан".