Java 自动装箱不适用于布尔值

Java 自动装箱不适用于布尔值,java,boolean,autoboxing,Java,Boolean,Autoboxing,我有一个简单的类,在下面编译时会正确地自动装箱整数 但是,对于我的布尔值,它没有这样做,它坚持我应该将参数更改为布尔值。我使用的是JDK1.8,否则编译器会抱怨整数转换。我看不出我做错了什么?所有包装器类都可以开箱即用,或者我是这么想的 public class MsgLog<Boolean,String> { private boolean sentOk ; private Integer id ; private int id2 ; public

我有一个简单的类,在下面编译时会正确地自动装箱整数 但是,对于我的布尔值,它没有这样做,它坚持我应该将参数更改为布尔值。我使用的是JDK1.8,否则编译器会抱怨整数转换。我看不出我做错了什么?所有包装器类都可以开箱即用,或者我是这么想的

public class MsgLog<Boolean,String> {

    private boolean sentOk ;
    private Integer id ;
    private int id2 ;
    public boolean isSentOk() {
        return sentOk;
    }

    public String getTheMsg() {
        return theMsg;
    }

    private String theMsg ;

    private MsgLog(Boolean sentOkp, String theMsg)
    {

        this.sentOk = sentOkp ; // compile error - autoboxing not working

        this.theMsg = theMsg ;

        this.id = 2; // autoboxing working
        this.id2 = (new Integer(7)) ; // autoboxing working the other way around as well

    }

}

您的问题是第一行:

public class MsgLog<Boolean,String> 

您的问题是第一行:

public class MsgLog<Boolean,String> 

您可能会考虑共享实际编译器错误而不是让我们猜测……在代码行>代码>代码>你的评论“自动装箱工作”是不正确的。你可以考虑共享实际的编译器错误而不是让我们猜测……在线上没有拳击。<代码> THE.ID=2;
因此您的注释“autoboxing working”不正确。+1,特别是它们是泛型类型参数,这可能有助于为OP澄清它。@GriffeyDog谢谢,但这些类型参数不是泛型的(而是泛型类型的类型参数)!术语“类型参数”在此实例中是正确的。就我所见,语言规范甚至没有使用术语“泛型类型参数”。我本可以用更好的措辞。它们是泛型类的类型参数。@davmac,即使它们对实际值进行了阴影处理-即所谓的覆盖(阴影)布尔值和导致覆盖的布尔值。。。。两者的行为方式应该仍然相同,即处于Autobox???@user1561783的位置,不。Autboxing不能处理某些任意类型的参数,这就是您现在拥有的。例如,在您的示例中,将“Boolean”替换为“T”,无论它出现在何处(包括在方法签名中)。这在语义上是等价的。您仍然希望它自动装箱/取消装箱吗?在任何情况下,如果从类中删除类型参数,您将看到它已编译。这应该足够证明了。+1,特别是它们是泛型类型参数,这可能有助于在OP中澄清它。@GriffeyDog谢谢,但这些类型参数不是泛型的(相反,它们是泛型类型的类型参数)!术语“类型参数”在此实例中是正确的。就我所见,语言规范甚至没有使用术语“泛型类型参数”。我本可以用更好的措辞。它们是泛型类的类型参数。@davmac,即使它们对实际值进行了阴影处理-即所谓的覆盖(阴影)布尔值和导致覆盖的布尔值。。。。两者的行为方式应该仍然相同,即处于Autobox???@user1561783的位置,不。Autboxing不能处理某些任意类型的参数,这就是您现在拥有的。例如,在您的示例中,将“Boolean”替换为“T”,无论它出现在何处(包括在方法签名中)。这在语义上是等价的。您仍然希望它自动装箱/取消装箱吗?在任何情况下,如果从类中删除类型参数,您将看到它已编译。这应该是足够的证据。
public class MsgLog<T,U> {

    private boolean sentOk ;
    private U theMsg ;

    private MsgLog(T sentOkp, U theMsg)
    {

        this.sentOk = sentOkp ; // compile error - assignment to incompatible type
        this.theMsg = theMsg ;
    }

}