java - 变量是从另一个内部类内部的内部类中访问的
问题描述
我在另一个内部类中有一个内部类,我试图在两个内部类之外使用最终变量。这是代码:
final View v = inflater.inflate(R.layout.fragment_floor_plan, container, false); //final variable
final Button button0 = v.findViewById(R.id.button21);
button0.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final PhotoView photoView = v.findViewById(R.id.photo_view); //works fine here
photoView.setAlpha(0f);
System.out.println(photoView.isZoomable());
System.out.println(photoView.VISIBLE);
photoView1.animate().alpha(0f).setDuration(250);
photoView.animate().alpha(1f).setDuration(250);
photoView.bringToFront();
photoView.setOnScaleChangeListener(new OnScaleChangedListener() {
@Override
public void onScaleChange(float scaleFactor, float focusX, float focusY) {
if (photoView.getScale() <= photoView.getMinimumScale() + 0.1f) {
LinearLayout linearLayout = v.findViewById(R.id.linearLayout); //doesn't work here
linearLayout.bringToFront();
}
}
}
}
});
如何让它在 OnScaleChangedListener 中工作?
解决方案
现在我看了一下,您的问题可能是 View v 正在作为参数传递给 OnClickListener 的 onClick 方法,并且下面的代码可能试图访问而不是您的顶级 View 变量。
我的建议是重构您的变量名称,以便您引用正确的变量。如果传入的 View 是您真正想要使用的,则应在方法签名中将其声明为 final:
public void onClick(final View v) {
如果嵌套匿名类的封闭范围内的变量被声明为最终或有效最终,您应该能够从任何级别的嵌套内部匿名类中访问它。
为了确保这一点,我做了一个小例子并自己尝试了一下:
import java.util.function.*;
public class Main {
public static void main(String[] args) {
final int test = 11;
Runnable runnable = new Runnable() {
public void run() {
Runnable runnable = new Runnable() {
public void run() {
System.out.println(test);
}
};
runnable.run();
}
};
runnable.run();
}
}
如您所见,第二个可运行对象嵌套在另一个可运行对象中,运行代码会访问整数测试并按应有的方式打印它。
推荐阅读
- c# - 将日期添加到时间戳
- reactjs - 使用 url 加载视频标签时获取 net::ERR_HTTP2_PROTOCOL_ERROR
- cognos - 如何在值提示 CA11 中显示提示宏的默认值?
- performance - 根据硬件规格调整 StormCrawler 拓扑
- java - OpenApi (Swagger) 枚举显示名称
- django - CurrentUserDefault 在使用 Django Rest 时不起作用
- amazon-web-services - 错误:应用程序版本 app-xxx 的预处理因 codecommit 失败
- python - scikit-learn train_test_split 中与平台无关的随机状态
- c++ - 输入字母、符号和负数时验证年龄输入以提示消息
- java - 如何在 log4j2.xml 中使用 mongo appender 将日志数据字段映射到 mongodb 中的基本模型