Экземпляр не передает заданные переменные классу

#java #class #object #bukkit #instance-variables

#java #класс #объект #bukkit #переменные экземпляра

Вопрос:

прежде всего; Спасибо за чтение и помощь мне, я новичок в Java, я столкнулся с проблемой.

Я создал переменные экземпляра внутри определенного класса. После этого я создаю новый экземпляр / объект этого класса и указываю новый ввод переменной. Проблема в том, что когда я запускаю код и пытаюсь, работает ли он, он не работает. Похоже, что новая переменная не передается создаваемому классу. (Когда я щелкаю левой кнопкой мыши по изумрудному блоку, появляется пустая строка)

Что я уже пробовал:

  • создание метода установки для установки переменной.
  • использование конструктора

Класс, из которого я хочу создать экземпляр:

 package rico.polkadot;

import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;

public class InstanceClass implements Listener {
    
    public String name;     
    
    @EventHandler
    public void onInteract(PlayerInteractEvent e) {
        
        Action action = e.getAction();
        Player p = e.getPlayer();
        Block b = e.getClickedBlock();
        
        if(action.equals(Action.LEFT_CLICK_BLOCK)) {
            if(b.getType().equals(Material.EMERALD_BLOCK)) {
                p.sendMessage(name);
            }
        }
    }
}
 

Основной класс:

 package rico.polkadot;

import java.util.List;

import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin {
    
    @Override
    public void onEnable() {
        getServer().getPluginManager().registerEvents(new InstanceClass(this),this);
        InstanceClass test = new InstanceClass();{
            test.name = "lol";
        }
    }
}
 

Комментарии:

1. «я хочу создать экземпляр», вы создаете его экземпляр, который называется test .

2. Не похоже, что есть проблема с установкой переменной. У вас есть общедоступная переменная, и вы устанавливаете ее после создания экземпляра с именем test

3. @Stultuske о, ну, извините меня. Я создаю экземпляр с именем test, но с именем строковой переменной, измененным на «lol». Тем не менее, это не работает, когда я запускаю код .. (При разрыве изумрудного блока не появляется сообщение со строкой «lol»)

Ответ №1:

Хорошо, вы должны создать конструктор или, по крайней мере, сеттер в вашем InstanceClass лучшем варианте:

 public class InstanceClass implements Listener {

    public String name;

    public InstanceClass(String name) {
        this.name = name;
    }
}
 

Тогда вы спрашиваете об экземпляре. Вы создали его внутри своей onEnable() функции, но вы должны помнить, что он недоступен вне этой функции, поэтому вы не можете просто получить доступ к этой test переменной из своего InstanceClass .

 @Override
public void onEnable() {
    // here you create instance of InstanceClass
    InstanceClass test = new InstanceClass("lol");
}
 

Комментарии:

1. Спасибо за вашу помощь AP11, я пробовал, но это не сработало.. Я также должен зарегистрировать слушателя в nnEnable (не включил его в свой пост) Код, необходимый для регистрации событий: getServer().getPluginManager().registerEvents(new InstanceClass(null),this);

Ответ №2:

Решаемая, требуется несколько конструкторов и «RegisterEvents» в OnEnable. Спасибо за помощь.