Java 为什么我需要=(类)。。。我什么时候已经申报了?
我不太熟悉Java中的语法和规则,所以这里有一个简单的问题:为什么我要写:Java 为什么我需要=(类)。。。我什么时候已经申报了?,java,objective-c,Java,Objective C,我不太熟悉Java中的语法和规则,所以这里有一个简单的问题:为什么我要写: LayoutParams params = (LayoutParams) layout.getLayoutParams(); 但我不会写: LayoutParams params = layout.getLayoutParams(); 在Obj-C中,我只需要编写 UIScrollView* abc = (UIScrollView*) [self.view viewWithTag:(1)]; 当从[self.vie
LayoutParams params = (LayoutParams) layout.getLayoutParams();
但我不会写:
LayoutParams params = layout.getLayoutParams();
在Obj-C中,我只需要编写
UIScrollView* abc = (UIScrollView*) [self.view viewWithTag:(1)];
当从[self.view view with tag:(1)]
返回的对象不在abc
的预期类中时(在这种情况下,它位于UIView
)
同样的逻辑适用于Java吗?如果这是真的,那意味着从layout.getLayoutParams()
返回的对象不属于类LayoutParams
,这有点奇怪
那么,我的假设是否正确,或者Java是否有不同的规则
LayoutParams params = (LayoutParams) layout.getLayoutParams();
这里您正在对layout.getLayoutParams()返回的任何对象进行类型转换
到LayoutParams
类型的实例。这称为缩小转换。如果getLayoutParams()
返回类LayoutParams
或其子类的实例,则此操作将起作用或失败
这里您正在对
layout.getLayoutParams()返回的任何对象进行类型转换
到LayoutParams
类型的实例。这称为缩小转换。如果getLayoutParams()
返回类LayoutParams
或其子类的实例,然后这将起作用或失败。您的假设是正确的getLayoutParams
返回的类必须不是LayoutParams
的子类。要么方法名称命名不当,要么可能在不同的包中有两个不同的LayoutParams
类。您应该调查返回类型,并确认它始终是您正在使用的布局参数的子类,否则您将面临类异常的风险您的假设是正确的getLayoutParams
返回的类必须不是LayoutParams
的子类。要么方法名称命名不当,要么可能在不同的包中有两个不同的LayoutParams
类。您应该调查返回类型是什么,并确认它始终是您正在使用的LayoutParams
的子类,否则您将面临ClassCastException
的风险。简短回答:您不需要这样做
如果getLayoutParams()
返回一个更通用的类型,并且您正在尝试缩小它,那么您就需要这样做。如果是这样的话,那么该方法的名称是非常容易误导的——但它与Java的语法无关。简短回答:您不需要这样做
如果getLayoutParams()
返回一个更通用的类型,并且您正在尝试缩小它,那么您就需要这样做。如果是这样的话,那么该方法的名称是非常容易误导的——但它与Java的语法无关。您确实可以编写
LayoutParams params = layout.getLayoutParams();
如果layout.getLayoutParams()
声明返回类型为LayoutParams
的结果,或LayoutParams
的子类。但是,如果声明返回LayoutParams
的超类(或接口),即使它实际返回的是LayoutParams
实例,它也不起作用。在这种情况下,您需要将它转换为LayoutParams
:
LayoutParams params = (LayoutParams)layout.getLayoutParams();
你确实可以写作
LayoutParams params = layout.getLayoutParams();
如果layout.getLayoutParams()
声明返回类型为LayoutParams
的结果,或LayoutParams
的子类。但是,如果声明返回LayoutParams
的超类(或接口),即使它实际返回的是LayoutParams
实例,它也不起作用。在这种情况下,您需要将它转换为LayoutParams
:
LayoutParams params = (LayoutParams)layout.getLayoutParams();
如果layout.getLayoutParams()
方法的返回类型为LayoutParams
,则
LayoutParams params = layout.getLayoutParams();
这很好用
但是如果返回类型是常规的(假设一个接口或超类为LayoutParams
,但它实际返回的对象为LayoutParams
),那么在这种情况下,您必须键入cast,因为自动向下转换在java中是不可能的,您必须显式地强制转换
LayoutParams params = (LayoutParams) layout.getLayoutParams();
如果layout.getLayoutParams()
方法的返回类型为LayoutParams
,则
LayoutParams params = layout.getLayoutParams();
这很好用
但是如果返回类型是常规的(假设一个接口或超类为LayoutParams
,但它实际返回的对象为LayoutParams
),那么在这种情况下,您必须键入cast,因为自动向下转换在java中是不可能的,您必须显式地强制转换
LayoutParams params = (LayoutParams) layout.getLayoutParams();
不,正如您所说:如果结果与预期的类不同,您必须根据(类)
更改它
在您的情况下,我认为getLayoutParams()
返回ViewGroup.LayoutParams,因此您必须进行(类)
更改。
下面是对否的解释,正如您所说:如果结果与预期的类不同,您必须根据(类)
更改它
在您的情况下,我认为getLayoutParams()
返回ViewGroup.LayoutParams,因此您必须进行(类)
更改。
这里有一个关于的解释,但我猜你说的是安卓系统。该方法返回一个。该类的文档告诉我们它有一系列子类:AbsListView.LayoutParams,
,Gallery.LayoutParams
,ViewGroup.MarginLayoutParams
,ViewPager.LayoutParams
,WindowManager.LayoutParams
,等等
因此,可能发生的情况是,您粘贴的代码范围中的名称LayoutParams
引用了这些子类之一。(可能您继承了AbsListView
,或者您/IDE为它做了一个导入静态
)