别名对线程安全有什么影响吗?

cigdeys3  于 2021-07-05  发布在  Java
关注(0)|答案(1)|浏览(440)

下面的代码首先通过向下转换来访问变量,我想知道如果方法的返回类型返回与我使用的别名相同的别名,是否会有什么不同( ContainerPieceVolumesBinding binding ),或作为方法参数传入的。
我已经测试了代码,它似乎工作得很好,问题是可能有第二个访问点指向同一个变量(第二个访问点是可选的)。
理论上,第二个访问点将使用viewbind别名,而不是我正在使用的向下转换版本。
如果不是返回方法参数抛出的同一个别名,而是返回向下转换的版本,会有什么区别吗?

  1. @SuppressWarnings("unchecked")
  2. @Override
  3. public ViewDataBinding setData(ViewDataBinding viewBind, @NonNull String bindingTag) {
  4. BindingVisitorsBaseAdapter adapter = new BindingVisitorsBaseAdapter(
  5. TAG
  6. );
  7. adapter.setCompletePendingBindings(
  8. pendingBindings
  9. );
  10. //This is the downcasted alias
  11. ContainerPieceVolumesBinding binding = (ContainerPieceVolumesBinding) viewBind;
  12. binding.pieceVolumesContainer.setAdapter(adapter);
  13. observer = new ObjectNotifier(
  14. ) {
  15. @Override
  16. public Notifier onNotified() {
  17. return (response, responseType) -> {
  18. switch (responseType) {
  19. case SUBMIT_LIST :
  20. List<BindingVisitor> pieceVolumes = (List<BindingVisitor>) response[0];
  21. ((BindingVisitorsBaseAdapter)binding.pieceVolumesContainer.getAdapter()).submitList(pieceVolumes);
  22. break;
  23. case QUANTITY_CHANGE:
  24. onQuantityChanged.onChanged(getValues(binding.pieceVolumesContainer));
  25. break;
  26. }
  27. };
  28. }
  29. };
  30. observer.notifyResponse(SUBMIT_LIST, new ArrayList<>());
  31. // returning the original version here
  32. return viewBind;
  33. }
mspsb9vt

mspsb9vt1#

除非您是通过对象调用引用静态方法,否则向上投射和向下投射不会影响调用的安全性

  1. public class A {
  2. public void foo() {
  3. System.out.println("A");
  4. }
  5. public static void bar() {
  6. System.out.println("As");
  7. }
  8. }
  9. public class B extends A {
  10. private void foo() {
  11. System.out.println("B");
  12. }
  13. public static void bar() {
  14. System.out.println("Bs");
  15. }
  16. }
  17. A var = new B();
  18. var.foo(); //will print B
  19. var.bar(); //will print A
  20. ((B)var).foo(); //will print B
  21. ((B)var).bar(); //will print B
展开查看全部

相关问题