草庐IT

java - 转换为通用变量

我了解泛型和转换,但不了解泛型转换。我以为我只能通过继承树向上或向下转换为特定类型,但这证明我错了:ArrayListcislo=(ArrayList)newArrayList();这可能不是最好的例子,但希望你能明白我的意思。这是如何运作的?它被转换成什么类型​​? 最佳答案 Actor是不必要的。作业ArrayListlist=newArrayList();ArrayListlist2=newArrayList();不需要任何显式转换。通配符类型比具体类型“更通用”/“更不具体”,upperboundedwildcardtype

java隐式长转换行为

今天我发现我的一个程序有问题,因为隐式转换不起作用,最好说它没有像我预期的那样工作。我有这样的东西longnormal=1000*24*3600*1000;System.out.println("normal:"+normal);normal:500.654.080向excel查询正确的计算结果应该是86.400.000.000;我去了javamanuallong数据类型的最大值应为2^63-1,即:9.223.372.036.854.780.000然后我试着强制类型转换变长,它似乎奏效了:longnormal=1000*24*3600*1000;longexplicit=1000*2

java - 从父类返回子类

我有一个构建器类,它从大多数方法返回自身以允许菊花链。为了使它与子类一起工作,我希望父方法返回子类的实例,以便子方法可以链接到最后。publicclassBaseBuilder>{publicTbuildSomething(){doSomeWork();/*OPTION#1:*/returnthis;//"Typemismatch:cannotconvertfromBaseBuildertoT"/*OPTION#2:*/returnT.this;//"Typemismatch:cannotconvertfromBaseBuildertoT"/*OPTION#3:*/return(T)t

java - Java 编译器如何解析类型转换?

一个简单的表达式如(x)-y根据x是否是类型名称而被不同地解释。如果x不是类型名称,(x)-y只是从x中减去y。但是,如果x是类型名称,(x)-y计算y的负数并将结果值转换为类型x。在典型的C或C++编译器中,x是否是类型的问题是可以回答的,因为解析器在处理typedef或struct声明后立即将此类信息传达给词法分析器。(我认为这种要求违反级别是C设计中最糟糕的部分。)但在Java中,x可能要到源代码的后面才定义。Java编译器如何消除这种表达式的歧义?很明显,Java编译器需要多次通过,因为Java不需要使用前声明。但这似乎意味着第一遍必须在解析表达式上做一个非常草率的工作,然后在

java - 在 JRuby 中转换对象

有没有一种方法可以将一个Java对象从JRuby显式转换为另一个Java类?有时我希望能够从JRuby调用SomeJavaClass#aMethod(MySuperClass)而不是SomeJavaClass#aMethod(MyClass)。在Java中,我会这样做:someJavaObject.aMethod((MySuperClass)myObj);但我没有看到#castruby​​方法或类似的方法来执行JRuby中的等效操作。注意问题CastingJavaObjectsFromJRuby缺少针对一般情况的答案,这就是我重新提出问题的原因。 最佳答案

java - Java cast 运算符如何工作?

我正在尝试调试涉及Java中的ClassCastException的问题。为了解决这个问题,我需要知道当我从Object转换为特定类型时发生了什么。任何人都可以向我解释一下Java强制转换运算符在Java级别和JVM级别是如何工作的吗? 最佳答案 是JLS够好了吗?Castingconversionisappliedtotheoperandofacastoperator(§15.16):thetypeoftheoperandexpressionmustbeconvertedtothetypeexplicitlynamedbythec

java - 扩大/缩小转换的实际应用?

有人可以解释一下为什么您会使用扩大或缩小转换吗?我已经阅读了很多关于这些的内容,但没有人给我一个实际的例子。谢谢! 最佳答案 (Java)扩大和缩小转换与相关类型之间的转换有关。以抽象(超)类与其(子)子类之间的关系为例;让我们使用java.lang.Number类(抽象)和一个直接子类Integer。我们有:(superclass)Number__________/\__________/||\(concretesubclasses)IntegerLongFloatDouble扩大转换:如果我们采用特定类型(子类)并尝试将其分配给

java - 对 checkcast 字节码指令感到困惑?

我正在研究我自己的JVM实现,并转向了checkcast指令。完整的文档是onthispage.我很好奇,因为在枚举转换工作方式的规则时,检查的一个条件是检查的对象引用是否为接口(interface)类型。据我了解,这是不可能的;接口(interface)不能直接实例化,任何实现接口(interface)的对象都有一些其他的具体类类型。我错过了什么吗? 最佳答案 似乎您不是唯一对这个定义感到困惑的人,这篇博文有解释:http://mbravenboer.blogspot.com/2008/12/why-jvm-spec-define

Java if 三元运算符和 Collections.emptyList()

您能否解释一下为什么第一个返回类型无法编译代码?消息是:Typemismatch:cannotconvertfromListtoList.是否在第二种情况下插入了显式转换?publicclassGenericsTest{privateStringgetString(){returnnull;}publicListmethod(){StringsomeVariable=getString();//firstreturntype//returnsomeVariable==null?Collections.emptyList():Collections.singletonList(someV

java - 将对象从父类类型转换为子类

我对Java语言的类型转换有一个误解。问题是ClassCastException。例如,在这段代码中,假设Animal是Dog类的父类,Animalanimal=newAnimal();Dogdog=(Dog)animal;执行后抛出ClassCastException。然而,在研究android包时,我发现了一个关于类型转换的例子,考虑到那个java例子,它应该抛出一个ClassCastException。EditTexteditText=(EditText)findViewById(R.id.edit_message);在这段代码中,findViewById方法返回一个View类对