草庐IT

java - 多态性,如何避免类型转换?

很抱歉问了这么长的问题,但请耐心等待,我已尽力让我的问题尽可能易于理解。如果您认为它可以更简洁,请随时对其进行编辑。我有一个客户端-服务器系统,其中客户端向服务器发送不同类型的请求,并根据请求返回响应。客户端系统中的代码是:intrequestTypeA(){Requestrequest=newRequest(TypeA);Responseresponse=request.execute();//responseforrequestofTypeAcontainsaintreturnresponse.getIntResponse();}StringrequestTypeB(){Reque

java:将二进制字符串转换为int

我正在尝试将几个二进制字符串转换回int。但是它并没有转换我所有的二进制字符串,给我留下了一个java.lang.NumberFormatException异常。这是我的带有3个二进制字符串的测试代码:publicclassBin{publicstaticvoidmain(Stringargvs[]){StringbinaryString;binaryString=Integer.toBinaryString(~0);//binaryString=Integer.toBinaryString(~1);//binaryString="1010";intbase=2;intdecimal=

java - 将对象转换为未实现的接口(interface)

我在我的学习书中发现了以下问题并且有点困惑:给定以下代码,哪个选项,如果用来替换/*INSERTCODEHERE*/,将使Roamable类型的引用变量能够引用Phone类?(选择1个选项。)interfaceRoamable{}classPhone{}classTabletextendsPhoneimplementsRoamable{//INSERTCODEHERE}选项是:可漫游var=newPhone();可漫游var=(Roamable)Phone();Roamablevar=(Roamable)newPhone();因为接口(interface)Roamable和类Phone

java - 类型转换在编译器/机器级别做什么?

我经常想知道转换在编译器或机器级别到底做了什么。它对内存中的0和1有什么作用?谁能给我指点一些好的文学作品。 最佳答案 在引用类型之间进行转换时,转换不会修改各个位,它只是指示编译器/运行时在可能的情况下以特定方式解释这些位。如果由于类型不兼容而无法在编译时进行转换,则会发出错误。如果在运行时无法进行转换,则会抛出异常。wikipageontypeconversion有附加信息。 关于java-类型转换在编译器/机器级别做什么?,我们在StackOverflow上找到一个类似的问题:

java - Java 整数类型原始类型是否在转换类型的 MAX_INT 处转换为 "capped"?

我试图追踪一些非常奇怪的Java行为。我有一个涉及double的公式,但“保证”给出整数答案——具体来说,是一个无符号的32位整数(唉,Java做得不好)。不幸的是,我的回答有时不正确。最终我发现了这个问题,但对我来说这种行为仍然很奇怪:一个double直接转换为一个int似乎对于有符号整数,上限为MAX_INT,而double转换为long,then转换为int给出了预期的答案(-1;无符号32位整数的MAXINT表示为带符号的32位整数)。我写了一个小测试程序:publicstaticvoidmain(String[]args){//ThisistheMaxIntfora32-bi

java - 将类类型传递给方法,然后转换为该类型?

我对Java还是很陌生,所以我可能在这里遗漏了一些明显的东西。我使用以下代码从我的所有实体列表中选择类类型:publicArrayPickEntities(Classcls){ArrayallEntities=newArray();for(SpriteEntityentity:MyGame.AllEntities){if(entity.getClass()==cls){allEntities.add(entity);}}returnallEntities;}这很好用,但这意味着在调用此方法时我仍然需要将其转换为另一端的类。例如:asteroid=(Asteroid)PickEntiti

java - 将类转换为不相关的接口(interface)

显然,这会导致编译错误,因为Chair与Cat无关:classChair{}classCat{}classTest{publicstaticvoidmain(String[]args){Chairchair=newChar();Catcat=newCat();chair=(Chair)cat;//compileerror}}为什么当我将Cat引用转换为不相关的接口(interface)Furniture时,我只会在运行时出现异常,而编译器显然可以告诉Cat没有实现Furniture?interfaceFurniture{}classTest{publicstaticvoidmain(S

java - 为什么将 ArrayList 的泛型转换为父类(super class)不起作用?

有人可以向我解释为什么标记为//thislinegivesacompileerror(why?)的行吗?在下面的代码示例中不起作用?importjava.util.ArrayList;publicclassGenericCastCheck{classA{}classBextendsA{}publicstaticvoidmain(String[]args){AaObject=newA();BbObject=newB();//thislineworksfineaObject=bObject;//thislinegivesacompile(expected)bObject=aObject;A

java - Java 中的转换和动态与静态类型

我正在学习静态类型与动态类型,我已经基本了解它了,但我仍然无法理解这种情况。如果B类扩展A,我有:Ax=newB();是否允许以下​​内容?By=x;或者是否需要显式转换?:By=(B)x;谢谢! 最佳答案 显式转换是必需的,并且会成功。之所以需要它,是因为它总是成功:声明为Ax的变量可以引用不是instanceofB的实例。//Typemismatch:cannotconvertfromObjecttoStringObjecto="Ha!";Strings=o;//DOESN'TCOMPILE//Compilesfine,cast

java - 为什么将短变量赋值给 Integer 引用会产生编译时错误?

我在Java中有以下代码:classBoxing{publicstaticvoidmain(Stringargs[]){shorts=10;IntegeriRef=s;}}为什么编译会报错?如果我在表达式中将short显式转换为整数,它会成功编译。因为我在表达式中使用了一个short类型,所以在不需要显式大小写的情况下,默认情况下它不是应该是整数的类型吗? 最佳答案 你想在这里发生两件事:扩大和自动装箱。不幸的是,Java只能自动完成两者之一。原因很可能是自动装箱引入的时间很晚(在Java5中),他们必须小心不要破坏现有代码。你可以