wordpress导入主题数据,唐山做网站优化公司,网站建设策划方,彩票网站开发制作h5美图手机投射功能在哪将实例转换为设计不良的类型。 尽管如此#xff0c;在某些情况下没有其他选择。 从第一天开始#xff0c;执行此功能就已成为Java的一部分。 我认为Java 8提出了对这种古老技术稍加改进的需求。 静态铸造 Java中最常见的转换方法如下#xff1a; 静态… 美图手机投射功能在哪 将实例转换为设计不良的类型。 尽管如此在某些情况下没有其他选择。 从第一天开始执行此功能就已成为Java的一部分。 我认为Java 8提出了对这种古老技术稍加改进的需求。 静态铸造 Java中最常见的转换方法如下 静态铸造 Object obj; // may be an integer
if (obj instanceof Integer) {Integer objAsInt (Integer) obj;// do something with objAsInt
} 这使用了嵌入到该语言中的instanceof和cast运算符。 实例转换为的类型在这种情况下为Integer在编译时必须是静态已知的因此我们将其称为静态转换。 如果obj不是Integer 则上述测试将失败。 如果我们尝试将其强制转换则会得到ClassCastException 。 如果obj为null 则它无法通过instanceof测试但可以强制转换因为null可以是任何类型的引用。 动态铸造 我很少遇到的一种技术是使用Class上与运算符相对应的方法 动态转换为已知类型 Object obj; // may be an integer
if (Integer.class.isInstance(obj)) {Integer objAsInt Integer.class.cast(obj);// do something with objAsInt
} 请注意尽管在此示例中在编译时也知道要强制转换为的类但不一定如此 动态铸造 Object obj; // may be an integer
ClassT type // may be Integer.class
if (type.isInstance(obj)) {T objAsType type.cast(obj);// do something with objAsType
} 因为类型在编译类型时是未知的所以我们将其称为动态转换。 类型和空引用错误的实例的测试和转换结果与静态转换完全相同。 由vankarsten在CC-BY-NC 2.0下发布 。 在流中投放和可选 现在 转换Optional的值或Stream的元素是一个两步过程首先我们必须过滤掉错误类型的实例然后才能将其转换为所需的类型。 使用Class上的方法我们使用方法引用来实现。 以Optional为例 强制转换 Optional? obj; // may contain an Integer
OptionalInteger objAsInt obj.filter(Integer.class::isInstance).map(Integer.class::cast); 我们需要两个步骤来执行此操作没什么大不了的但我觉得这有点尴尬而且比必要时更冗长。 未来也许 我建议在Class上实现返回Optional或Stream强制转换方法。 如果传递的实例类型正确则将返回Optional或包含转换实例的Singleton Stream 。 否则两者都将为空。 实现这些方法很简单 课堂上的新方法 public OptionalT castIntoOptional(Object obj) {if (isInstance(obj))return Optional.of((T) obj);elseOptional.empty();
}public StreamT castIntoStream(Object obj) {if (isInstance(obj))return Stream.of((T) obj);elseStream.empty();
} 这使我们可以使用flatMap一步进行过滤和转换 该死的FlatMap Stream? stream; // may contain integers
StreamInteger streamOfInts stream.flatMap(Integer.class::castIntoStream); 类型错误或引用为空的实例将使实例测试失败并导致空的Optional或Stream 。 永远不会有ClassCastException 。 成本与收益 还需要确定这些方法是否会发挥自己的作用 实际可以使用多少代码 它们会提高普通开发人员的可读性吗 节省一行值得吗 实施和维护它们的成本是多少 我回答的问题不多 很少 是的 很少 。 因此它接近于零和游戏但我确信这是一个很小但不可忽略的收益。 你怎么看 您看到自己使用这些方法了吗 翻译自: https://www.javacodegeeks.com/2015/07/casting-in-java-8-and-beyond.html美图手机投射功能在哪