新的 Java 17 类型模式匹配开关在幕后如何工作?由于该功能相当新,因此这个问题不讨论它。
提醒:要使此代码在 Java 17 下运行,您需要启用预览功能
public static void test (Object o) {
System.out.println(switch(o){
case Number n -> "number " + n;
case Enum e -> "enum " + e;
case String s -> "string " + s;
default -> "other " + o;
});
}
Run Code Online (Sandbox Code Playgroud)
上面代码的反汇编版本使用javap -c:
0: getstatic #7 // Field java/lang/System.out:Ljava/io/PrintStream;
3: aload_0
4: dup
5: invokestatic #13 // Method java/util/Objects.requireNonNull:(Ljava/lang/Object;)Ljava/lang/Object;
8: pop
9: astore_1
10: iconst_0
11: istore_2
12: aload_1 …Run Code Online (Sandbox Code Playgroud) 当用户没有互联网连接时尝试使用 Gson 和 Retrofit2 读取 json 信息时,我试图阻止我的应用程序崩溃。有任何想法吗?
我的代码:
分段
class ManuFragment : Fragment() {
private lateinit var viewModel: ManuFragmentVM
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
_binding = FragmentManuBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel = ViewModelProvider(this).get(ManuFragmentVM::class.java)
viewModel.apply {
manufacturer.observe(requireActivity(), {loadRecyclerView(it)})
setup()
}
}
Run Code Online (Sandbox Code Playgroud)
查看模型
class ManuFragmentVM : ViewModel() {
val manufacturer = MutableLiveData<List<Manufacturers>>()
fun setup() {
viewModelScope.launch(Dispatchers.Default) {
manufacturer.postValue(CarsRepository().getAllManufacturers())
}
}
Run Code Online (Sandbox Code Playgroud)
界面
interface ManufacturerApi {
@GET("url.json")
suspend …Run Code Online (Sandbox Code Playgroud)