2016-08-08 3 views
0

Так что я бы не сказал, что я новичок в java, но я забыл совсем немного, так как я последний раз закодирован. Таким образом, мне было интересно, можно ли вообще отправлять параметры конструктора из одного класса в другой. Я предположил, что должен был создать объект конструктора из «класса B» в «классе A». Однако в моем втором классе есть несколько конструкторов, и если я не могу понять, как отправлять параметры, я застрял в конструкторе, который я не хочу использовать. Вот фрагмент моего кода.Как отправить параметры конструктора из одного класса в другой?

public class Title{ 
/* Title packet */ 
private Class<?> packetTitle; 
/* Title packet actions ENUM */ 
private Class<?> packetActions; 
/* Chat serializer */ 
private Class<?> nmsChatSerializer; 
private Class<?> chatBaseComponent; 
/* Title text and color */ 
private String title = "Falling Maze"; 
private ChatColor titleColor = ChatColor.GREEN; 
/* Subtitle text and color */ 
private String subtitle = "Tip: Fall through the maze to win! You may only touch sandstone!"; 
private ChatColor subtitleColor = ChatColor.RED; 
/* Title timings */ 
private int fadeInTime = 10; 
private int stayTime = 20; 
private int fadeOutTime = 20; 
private boolean ticks = true; 
private static final Map<Class<?>, Class<?>> CORRESPONDING_TYPES = new HashMap<>(); 

/** 
* Create a new 1.8 title 
* 
* @param title 
*   Title 
*/ 
public Title(String title) { 
    this.title = title; 
    loadClasses(); 
} 

/** 
* Create a new blank title. 
*/ 
public Title() { 
    this(""); 
} 

/** 
* Create a new 1.8 title 
* 
* @param title 
*   Title text 
* @param subtitle 
*   Subtitle text 
*/ 
public Title(String title, String subtitle) { 
    this.title = title; 
    this.subtitle = subtitle; 
    loadClasses(); 
} 

/** 
* Copy 1.8 title 
* 
* @param title 
*   Title 
*/ 
public Title(Title title) { 
    // Copy title 
    this.title = title.title; 
    subtitle = title.subtitle; 
    titleColor = title.titleColor; 
    subtitleColor = title.subtitleColor; 
    fadeInTime = title.fadeInTime; 
    fadeOutTime = title.fadeOutTime; 
    stayTime = title.stayTime; 
    ticks = title.ticks; 
    loadClasses(); 
} 

/** 
* Create a new 1.8 title 
* 
* @param title 
*   Title text 
* @param subtitle 
*   Subtitle text 
* @param fadeInTime 
*   Fade in time 
* @param stayTime 
*   Stay on screen time 
* @param fadeOutTime 
*   Fade out time 
*/ 
public Title(String title, String subtitle, int fadeInTime, int stayTime, int fadeOutTime) { 
    this.title = title; 
    this.subtitle = subtitle; 
    this.fadeInTime = fadeInTime; 
    this.stayTime = stayTime; 
    this.fadeOutTime = fadeOutTime; 
    loadClasses(); 
} 

Это мой класс со всеми конструкторами, используемыми для разных типов названий. То, что я хочу сделать, - это создать заголовок с заголовком, субтитрами, fadeInTime, stayTime и fadeOutTime и вызвать его в другом классе, указанном ниже.

public class Main extends JavaPlugin implements Listener{ 

private Title t1 = new Title(); 

public void onEnable() 
{ 
    Bukkit.getPluginManager().registerEvents(this, this); 

} 
@EventHandler 
public void playerJoin(PlayerJoinEvent event) 
{ 
    //getting the player's name 
    Player player = event.getPlayer(); 
    //adding the gold ingot and the bed to their respective inventory slots. 
    ItemStack bed = new ItemStack(Material.BED); 
    ItemStack goldIngot = new ItemStack(Material.GOLD_INGOT); 
    player.getInventory().setItem(0, goldIngot); 
    player.getInventory().setItem(8, bed); 
    t1.send(player); 
} 

, когда я создал объект моего класса заголовка все это сделали, переубедить мой первый конструктор (тот, который создает пустой заголовок). То, что я хотел бы получить, - это возможность создать полный заголовок, как я уже говорил, название, субтитры, fadeInTime, stayTime и fadeOutTime. Любая помощь будет высоко оценена, потому что, когда я пытаюсь передать параметры на мой новый объект Title(), он говорит, что параметры не могут быть разрешены переменной. Спасибо заранее. Я старался быть как можно более конкретным, но задаю мне все, что помогло бы, и я отвечу на все свои способности.

Большой реквизит Андреаса, который помогает мне понять это. оказывается, что мой заголовок был перезаписан, несмотря ни на что, поэтому я настроил цикл for в моем основном классе, который отправил бы таймер в качестве моего названия. Это позволило мне вырваться из другого класса. Спасибо огромное!^-^Есть ли способ повысить ваш комментарий?

+1

"привести"? Если вы можете получить доступ к одному (общедоступному) конструктору, вы должны иметь доступ ко всем из них. Вы уверены, что импортировали правильный класс Title во втором фрагменте? – Kerstomaat

+1

как @Kerstomaat сказал, что вы должны иметь доступ к другим конструкторам – striker

+1

@kerstomaat, вы говорите, что я не импортировал правильный класс заголовка или конструктор? Я действительно импортировал правильный класс, потому что когда я создал свой объект и зависал над конструктором нового объекта, он дал мне использование класса, который создает новый пустой заголовок. Я не хочу, чтобы это то, что я имею в виду. Мне бы хотелось создать заголовок, субтитры, fadeInTime, stayTime и fadeOutTime. – featherpaw

ответ

0

Я довольно не уверен, о чем вы просите, но .. Если вам нужно передать значение из входного параметра из 1-го конструктора в конструктор 2-го класса, вы можете сделать это просто. Проверьте псевдокод ниже:

Пусть у вас есть 2 классы (позвольте мне сказать ClassA и ClassB), оба из них будет иметь 1 строковый параметр в конструктор, а второй класс также будет иметь входной параметр одно целое число, так что это будет выглядеть следующим образом:

class ClassA{ 
     /*that will be variable of each instance of that class 
     * when public, can call something like 
     * classAinstance.classInstanceVariableA, otherwise you have to make getter for reading and setter for setting 
     */ 
     String classInstanceVariableA; 

     //that is the constructor 
     ClassA(String paramStr){ 
     //..whatever, eg. 
     this.classInstanceVariableA = paramStr; 
     } 

    //getter example 
    public String getClassInstanceVariableA(){ 
     return classInstanceVariableA; 
    } 

    //setter example 
    public void setClassInstanceVariableA(String value){ 
     this.classInstanceVariableA = value; 
    } 
} 

class ClassB{ 
    ClassA classBinstanceVariableOfClassAType; 
    int classBintVarInstance; 

    ClassB(String classBparamConstructor, int param2intConstructor){ 
     //there you can call construtor from the ClassA eg.- that you mean?!? 
     this.classBinstanceVariableOfClassAType = new ClassA(classBparamConstructor); 
     this.classBintVarInstance = param2intConstructor; 

     //when public parameter classInstanceVariableA 
      //read value this.classBintVarInstance.classInstanceVariableA 
      //set value this.classBintVarInstance.classInstanceVariableA = "foo" 
     //when not public and you have getter and setter 
      //read value this.classBintVarInstance.getClassInstanceVariableA(); 
      //set value this.classBintVarInstance.setClassInstanceVariableA("foo"); 
    } 
} 

Пожалуйста, обратите внимание, вы не можете назвать что-то вроде classBinstance.classBinstanceVariableOfClassATypeдо тех пор, пока общественность или вы снова сорбент там, вы можете также сделать метод для получения упомянутой переменной строки из classA в classB , Чисто?

Смежные вопросы