【问题标题】:Java constructor: creating an object, short parameters are interpreted as intJava构造函数:创建对象,短参数被解释为int
【发布时间】:2012-09-25 03:37:06
【问题描述】:

我正在用 Java 编写一个小排序程序,旨在抓取一个“学生”对象,并根据参数和属性确定它的名称、职业和教室。然而,当我尝试创建第一个对象时,出现了一个问题。 到目前为止,一切看起来像这样:

public class Student {
    private String name, classroom;
    /**
     * The career code is as follows, and I quote:
     * 0 - Computer Science
     * 1 - Mathematics
     * 2 - Physics
     * 3 - Biology
     */
    private short career, idNumber;

    public Student (String name, short career, short idNumber){
        this.name = name;
        this.classroom = "none";
        this.career = career;
        this.idNumber  = idNumber;
    }

    public static void main(String args[]){
        Student Andreiy = new Student("Andreiy",0,0);
    }
}

错误出现在对象创建行,由于某种原因,当构造函数调用短裤时,它坚持将 0,0 解释为整数,从而导致不匹配问题。

有什么想法吗?

【问题讨论】:

  • 您能发布异常或错误详细信息吗?
  • 将整数转换为短整数:new Student("Andreiy", (short)0, (short)0); 或在短数字后写一个“s”:new Student("Andreiy", 0s, 0s);
  • stackoverflow.com/a/2720821/55284 应该解释您需要了解的内容。
  • @StefanFandler - s 后缀在 Java 中不起作用。

标签: java constructor integer short


【解决方案1】:

一种方法是使用强制转换告诉编译器该值为short

Student Andreiy = new Student("Andreiy",(short)0,(short)0);

或者,重新定义Student 类以接受int 而不是short。 (对于职业代码,我建议使用enum。)

【讨论】:

    【解决方案2】:

    您应该将 Integer 转换为 short。整数到短的转换需要缩小范围,因此需要显式转换。只要有内存限制,就应该在 java 中使用整数。

    public Student (String name, Career career, int idNumber)
    
    //Enumeration for Career so no additional checks are required.
     enum Career
     {
         Computer_Science(0),Mathematics(1),Physics(2),Biology(3);
         private Career(int code)
         {
             this.code = code;
         }
         int code ;
    
         public int getCode()
         {
             return code;
         }
    
     }
    

    然后你可以做如下的事情

    new Student("Andreiy", Career.Computer_Science, 0);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-04
      • 2019-12-21
      • 1970-01-01
      • 1970-01-01
      • 2016-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多