首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >正确使用反射来获取类方法

正确使用反射来获取类方法
EN

Stack Overflow用户
提问于 2018-12-13 03:28:39
回答 2查看 167关注 0票数 0

我尝试执行issue 111316656的第11项中提出的建议,即:

您还应该能够使用反射来访问支持

的FloatingActionButtonImpl,然后在该实例上调用setImageMatrixScale(1)。

使用以下代码:

代码语言:javascript
复制
            FloatingActionButton fab;
            ...    
            Method method = null;
            try {
                method = fab.getClass().getMethod("setImageMatrixScale", null);
                method.invoke(fab, 1);
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }

但是NoSuchMethodException被提升了。有什么问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-17 17:12:48

在Mike M.的帮助下(请参阅问题中的注释),这是参考问题中包含的解决方法的JAVA版本:

代码语言:javascript
复制
            fab.show(new FloatingActionButton.OnVisibilityChangedListener() {
                @Override
                public void onShown(FloatingActionButton fab) {
                    try {
                        Field implField = FloatingActionButton.class.getDeclaredField("impl");
                        implField.setAccessible(true);
                        Object impl = implField.get(fab);
                        Class cls;
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                            cls = impl.getClass().getSuperclass();
                        } else {
                            cls = impl.getClass();
                        }
                        Method mthd = cls.getDeclaredMethod("setImageMatrixScale", Float.TYPE);
                        mthd.setAccessible(true);
                        mthd.invoke(impl, 1);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
票数 0
EN

Stack Overflow用户

发布于 2018-12-13 04:20:54

像这样试试吧

代码语言:javascript
复制
BluetoothGatt localBluetoothGatt = gatt;
  java.lang.reflect.Method localMethod = localBluetoothGatt.getClass().getMethod("refresh", new Class[0]);
  if (localMethod != null) {
    boolean bool = ((Boolean) localMethod.invoke(localBluetoothGatt, new Object[0])).booleanValue();
    return bool;
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53750074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档