【发布时间】:2018-03-23 00:31:58
【问题描述】:
我有一个对象obj,我想将它转换为实现接口Tool 的View。
class Whatever {
View viewObj;
Tool toolObj;
...
public void setViewTool( View obj )
{
viewObj = obj;
toolObj = (Tool) obj;
}
...
}
我想避免创建两个对象来处理这种情况,或者每次我想调用 View 或 Tool 的实现方法时都必须强制转换。
如果可能,使用两个或更多接口时,同样的事情。我记得一种语言我可以做这样的事情View<Tool, and, others, interfaces>。
示例
我认为问题的标题和第一行很清楚。但是,可能不是。
我在应用程序中显示了三个工具。一个是扩展LinearLayout,另外两个是FrameLayout。这些视图对象必须实现 Tool 接口,因为在它初始化、完成和用户做一些手势时会调用一些方法。但是,它也是一个视图,当我需要展示时,它需要调用setLayout, addView, animate 之类的东西。
澄清一下,在上面的示例中它可以正常工作。但是我必须设置两个变量来处理同一个对象,一个用于处理与视图方面相关的事情,一个用于处理工具界面。
我不能说泛型类不起作用,但我尝试过的方式却不起作用。我希望,可以创建一个类属性为private (View implements Tool) myObj;。
现在,我几乎可以肯定,从另一个答案来看这是不可能的:Java - Defining a member that extends class A and implements interface B
【问题讨论】:
-
这段代码没有意义。 为什么?而且你不能有
classnothing'。您可以将class设为通用,但为什么? -
@Elliott Frsich 已修复。类名无关紧要。
-
只有当 obj 是 View 的实例或 View 的子类时,才能这样做。否则你不能。
-
那么重要的是
Casting你不能只是将任何对象贬低到另一个对象。应该有一个IS A关系。你可以创建一个泛型类。 -
无论你写的是什么语法上是正确的,但逻辑上没有任何意义,你将一事无成。最好提供一个可以进一步澄清您的问题的场景。