Spigot - 保存BlockState不完整的块 - Java

时间:2016-02-10 19:04:12

标签: java arraylist minecraft bukkit

我尝试编写类似&#34;撤消&#34; -command的内容。也许你从WorldEdit知道它。对于保存的块我有一个ArrayList<BlockState>,但如果尝试保存胸部,标志等,它就不起作用。当然,我可以为箱子ArrayList<Chest>和标志ArrayList<Sign>以及Droppers ArrayList<Furnace>添加额外的列表....

有更好更简单的方法吗?

感谢您的帮助,抱歉我的英语不好;)

1 个答案:

答案 0 :(得分:1)

我不确定我是否正确理解了您的问题,但您可以定义inteface,假设您将其称为CommonInterface,并让所有课程(BlockState, Chest, Sign ...)实施这个interface。然后,您可以拥有一个List<CommonInterface>类型的对象(例如:List<CommonInterface> list = new ArrayList<>())并将所有对象保存在此list中。

注意:当您从list获取对象时,需要检查该对象的运行时类型,以便了解如何使用它。

示例:

CommonInterface ci = list.get(0);
if(ci instanceof BlockState){
   // do something ...
}
else if(ci instanceof Sign){
   // do something else ... 
}
...

这是另一个例子:

import java.util.ArrayList;
import java.util.List;

public class TestGenerics
{
   class A implements CommonInterface
   {
       public String say()
       {
           return "I'm A";
       }
   }

   class B implements CommonInterface
   {
       public String hi()
       {
           return "I'm B";
       }
   }

   class C implements CommonInterface
   {
       public String getName()
       {
           return "I'm C";
       }
   }

   interface CommonInterface
   {

   }

   public List<CommonInterface> get()
   {
       A a = new A();
       B b = new B();
       C c = new C();
       List<CommonInterface> ci = new ArrayList<>();
       ci.add(a);
       ci.add(b);
       ci.add(c);
       return ci;
   }

   public static void main(String[] args)
   {
       TestGenerics tg = new TestGenerics();
       List<CommonInterface> list = tg.get();
       for(CommonInterface ci : list){
           if(ci instanceof A){
               System.out.println(((A)ci).say());
           }
           else if(ci instanceof B){
               System.out.println(((B)ci).hi());
           }
           else if(ci instanceof C){
               System.out.println(((C)ci).getName());
           }
        } 
      }
  }