【问题标题】:Instance isn't passsing given variables to class实例没有将给定的变量传递给类
【发布时间】:2021-05-09 21:26:21
【问题描述】:

首先;感谢您阅读并帮助我,我是 Java 新手,但遇到了问题。

我在一个特定的类中创建了实例变量。在此之后,我创建此类的新实例/对象并指定变量的新输入。问题是:当我运行代码并尝试它是否工作时,它不工作。似乎新变量没有传递给正在实例化的类。 (当我左键单击翡翠块时,会出现一个空字符串)

我已经尝试过的:

  • 创建一个 setter 方法来设置变量。
  • 使用构造函数

我想创建一个实例的类:

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";
        }
    }
}

【问题讨论】:

  • “我想创建一个实例”,你正在创建它的一个实例,一个叫做 test。
  • 设置变量好像没有问题。您有一个公共变量,并且在创建名为 test 的实例后设置它
  • @Stultuske 哦,对不起。我创建了一个名称为 test 但字符串变量名称更改为“lol”的实例。仍然,当我运行代码时它不起作用..(当我打破翡翠块时没有弹出带有字符串“lol”的消息)

标签: java class object bukkit instance-variables


【解决方案1】:

好的,你应该在InstanceClass 中创建一个构造函数或至少设置一个 - 最佳选择:

public class InstanceClass implements Listener {

    public String name;

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

然后你问的是实例。您在 onEnable() 函数中创建了一个,但您必须记住,在此函数之外无法访问它,因此您不能仅从 InstanceClass 访问此 test 变量。

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

【讨论】:

  • 感谢您的帮助 AP11,我已经尝试过了,但没有成功。我还必须在 nnEnable 中注册监听器(我的帖子中没有包含它)注册事件所需的代码:getServer( ).getPluginManager().registerEvents(new InstanceClass(null),this);
【解决方案2】:

已解决,需要多个构造函数和 onEnable 中的“RegisterEvents”。感谢您的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 2021-08-20
    相关资源
    最近更新 更多