- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑这个Minimal, Reproducible Example :
interface Code {
static void main(String[] args) {
symbol(
String.valueOf(
true ? 'a' :
true ? 'b' :
true ? 'c' :
fail()
)
);
}
private static void symbol(String symbol) {
System.out.println(symbol);
}
private static <R> R fail() {
throw null;
}
}
(
true
接近最小,是一个有用的 boolean 表达式的代表。我们可以忽略第一个
? :
(在实际代码中,有很多)。)
4: reference to valueOf is ambiguous
both method valueOf(java.lang.Object) in java.lang.String and method valueOf(char) in java.lang.String match
好,让我们修复它。这是我想要的
String.valueOf(Object)
重载-我稍后可能想要添加:
true ? "sss" :
(实际上,我之前确实有类似的东西,但是现在删除了该功能。)
String.valueOf((Object)(
true ? 'a' :
fail()
))
这给出了警告:
4: redundant cast to java.lang.Object
这是编译器中的错误警告或错误吗?如何解决该错误,使代码合理且没有警告或错误?
throws Throwable
来自
template。实际代码确实使用文字字符*和
String.valueOf
,而其他地方使用了
String.valueOf(char)
重载,因此
toString()
有问题(哦Java!)。该代码避免了全局操作状态,例如
System.out
,
symbol
和
fail
在不同的类中。“switch”是不可枚举的类型。
fail
是类似assert方法的伴侣,所以这就是为什么它抛出(未经检查的非null)内部异常。
Object.class.cast
等效的毫无意义的
(Object)
。我真正想知道的是:wtf?
最佳答案
从Java 8开始,有关``歧义方法调用''的错误是正确的。
甚至在Java 8之前,您都可以编写
char c = fail();
Object o = fail();
没有编译器错误。当您将诸如
condition? 'a': genericMethod()
之类的条件传递给诸如
String.valueOf(…)
之类的方法时,由于其类型推断有限,编译器会为
<Object>
推断
fail()
并选择
String.valueOf(Object)
。
The type of a standalone expression can be determined entirely from the contents of the expression; in contrast, the type of a poly expression may be influenced by the expression's target type (§5 (Conversions and Contexts)).
String.valueOf(char)
在该条件下有效,因为我们可以推断
<Character>
为
fail()
。请注意,这两种方法都不适用于
strict invocation context,因为这两种变体都需要装箱或拆箱操作。在
loose invocation context中,
String.valueOf(Object)
和
String.valueOf(char)
均适用,因为在调用
Character
之后取消对
fail()
的包装还是对文字
char
的
'a'
进行包装都无所谓。
char
不是
Object
的子类型,并且
Object
不是
char
的子类型,因此
String.valueOf(Object)
和
String.valueOf(char)
都不是
more specific,因此会生成编译器错误。
javac
中已经存在,在其中删除强制转换实际上没有任何作用,因此,也许这是一个需要更新的内容。
char
,以使
String.valueOf(char)
方法不适用。只要插入评估结果为
String
的分支,就会发生这种情况。您还可以使用
SurroundingClass.<Object>fail()
来获得与Java 8之前的编译器推断的类型相同的类型。
fail()
似乎是一种解决方法,可以在表达式上下文中使用throwing方法。更干净的解决方案将是表达的工厂方法,例如
class Code {
public static void main(String[] args) throws SpecificExceptionType {
System.out.println(
String.valueOf(switch(0) {
case 0 -> 'a';
case 1 -> 'b';
case 2 -> 'c';
default -> throw fail();
})
);
}
private static SpecificExceptionType fail() {
return new SpecificExceptionType();
}
static class SpecificExceptionType extends Exception {
}
}
如果开关表达式不可行,则可以使用
System.out.println(
String.valueOf(
true ? 'a' :
true ? 'b' :
true ? 'c' :
Optional.empty().orElseThrow(Code::fail)
)
);
两者都具有特定于可能引发的异常的实际类型的优点,并且无需求助于未经检查的异常或
throws Throwable
声明。第二种方法可能会让人觉得很笨拙,但不只是定义一个永不返回任何内容的通用方法。
"" + (expression)
或
(expression).toString()
而不是
String.valueOf(expression)
时,该表达式不是多边形表达式,因此不会产生“歧义方法调用”错误。
@SuppressWarnings("cast")
添加到方法中(并等待直到编译器开发人员将其修复为止)。
关于java - “redundant cast to java.lang.Object”警告需要强制转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64839117/
我很确定我不会是第一个被这个绊倒的人,但我找不到答案。这是作业。 class Tier{} class Fisch extends Tier{} class Vogel extends Tier{}
在接收器开发人员指南中如下: Applications running on the Google Cast receiver device (receiver applications) are a
最近我制作了一个自定义本地 Flask 网站,用于从本地设备转换到连接到我的电视的 RPi4。有一个 GUI它也可以通过 GET 请求控制,这是转换工作的主要方式,实际上是通过 GET 请求将数据从
最近我因为某些原因重置了我的路由器,所以当我尝试将它连接到 chromecast 时,Chromecast 没有在其列表中列出我的 wifi 名称。 之前它工作正常,所以我选择其他并手动输入我的网络名
做这样的 Actor 阵容的好方法是什么? seq { yield (box "key", box "val") } |> Seq.cast 因为这看起来非常难看: seq { yield (box
我继承的遗留 Web 应用程序是在经典 ASP 中为新西兰乐施会定制编写的,它在用户提交的输入上运行字符串替换,删除字符串“cast”,大概是因为 cast 函数。 然而,这意味着我们的参与者都不能拥
我去了三星网站并下载了 Media Control SDK 包。当我在我的 Galaxy S3 Android 4.3 上使用 AllShare Cast 视频播放器时,我的智能电视(在同一网络中)出
如何在 BigQuery 中查看 INT64 的二进制表示形式?将其转换为 BYTES 类型也可以。 最佳答案 正如@Elliot Brossard 所述,INT64 如何执行是一个实现问题。类型表示
Google 的文档要求我们设置自己的网络服务器来托管 receiver.html。 是否有任何人都可以使用的默认公共(public) chrome-cast 接收器? 我只需要非常基本的接收器,与
我在 Eclipse 3.6 (Helios) 中运行某人的代码时遇到问题。代码是用 OpenJDK 7 编写的。我运行的是 Windows 7,我必须为它安装 Java 7。我之前使用的是 Java
所以我有一些 COM 类型,它们的名称很难记住、又长又笨重,所以如果可以避免的话,我宁愿在从对象进行转换时不必键入它们。使用 Seq.cast 它将推断所需的类型并根据需要进行强制转换。 这是一个用
假设您不关心编译器和机器的转换风格,以下之间是否存在明显差异: #include #include #include static int64_t tosigned (void *p) {
我的测试类 XString 有两个转换运算符。但是编译器不会为 fooA 使用显式转换 operator const wchar_t*()。为什么? class XString { public:
我有以下代码: T imageCollectionItem; // This checks if image actually exists, if it doesn't it gets the ne
这有点假设,因为我不太担心性能 - 只是想知道一般来说哪个选项实际上最快/最有效,或者是否没有任何区别。 假设我有以下支持重载的访问者模板代码: #define IMPLEMENT_VISITOR_W
我目前正在存储复选框的真/假状态。在注册表中检查值以在下次加载表单时重置。 加载表单时,我获取值并像这样设置复选框。 string value = (string)Registry.GetValue(
enum Gender { Male, Female } var k = new[] { Gender.Male }.Cast().ToList().Cast().ToList(); //alrigh
我正在按照 https://codelabs.developers.google.com/codelabs/cast-receiver#0 上的教程构建一个 chrome cast 自定义接收器。我无
我看不懂以下作品 SELECT price, CAST(price AS DECIMAL(10,2)) FROM orders; 但是更新失败: UPDATE orders SET price = C
在 Cast v3 中,如何手动更改“停止转换”按钮的颜色? 我可以为其他所有内容更改转换对话框或媒体路由器的样式,但“停止转换”按钮似乎会根据背景颜色切换为黑色/蓝色。 我的主题:
我是一名优秀的程序员,十分优秀!