В java как бы я установил потребитель равным некоторой другой переменной, приведенной к типу потребителя - PullRequest
0 голосов
/ 09 марта 2020

Итак, есть функция spawn:

public <T extends Entity> T spawn(@NotNull Location location, @NotNull Class<T> clazz, @Nullable Consumer<T> function) throws IllegalArgumentException;

Она создает сущность в мире Minecraft, в предоставленном вами месте Class, который вы предоставляете, и позволяет вам предоставить потребителя перед сущностью на самом деле появился в мире.

Я хотел бы взять уже существующую сущность и установить потребителя равным этому. Я пытаюсь сделать это с помощью:

private <T extends Entity> T cloneEntity(T entity, Location location) {
        return (T) location.getWorld().spawn(location, entity.getClass(), clone -> clone = clone.getClass().cast(entity));
    }

Компилятору не нравятся мои приведения здесь, и я действительно не уверен, как я могу благополучно в конечном итоге установить потребитель = в существующую сущность. Это в надежде попытаться «клонировать» существующую сущность.

Я добился определенного успеха, выполнив операцию таким образом

@SuppressWarnings({ "unchecked", "rawtypes" })
    private <T extends Entity> Entity cloneEntity(T entity, Location location) {
        Class clazz = entity.getClass();
        return (T) location.getWorld().spawn(location, clazz, clone -> clone = (Entity) entity);
    }

Однако потребитель, клон, устанавливается просто универсальный c объект, суперкласс, а не подкласс, поэтому данные теряются или происходит сбой приведения во время выполнения с определенными подклассами.

Как выполнить приведение на законных основаниях?

...