我有一个基本类型B和多个派生子类型,C1:B,C2:B,C3:B等.
我有每个子类型列表,ListL1,ListL2,ListL3.
我有每个子类型的工作函数F1,F2,F3,它们为该子项获取相应的列表L1,L2,L3,并完成基本上相同的功能(仅处理B的属性)但对于相应的类型,C1,C2,C3.
我希望有一个单一的函数,基于一个基类型列表,List"多态"执行子类型的函数独立.
我知道我应该能够通过使用模板说明符修复我的函数声明来将列表传递给我的函数,例如:
public void Fn<T>(List<T> BList) { /* do stuff */ }
Run Code Online (Sandbox Code Playgroud)
我希望我的每个子函数F1,F2,F3都可以调用Base函数
public void F1(List<C1> L1)
{
Fn(L1); // this is the line that fails
}
Run Code Online (Sandbox Code Playgroud)
我尝试过重铸作为基本类型,B
Fn( (List<B>)L1 );
Run Code Online (Sandbox Code Playgroud)
但是,我收到一个错误,说我无法将类型'System.Collections.Generic.List'转换为'System.Collections.Generic.List',即使C1是从B派生的.
我也试过在Fn名称中输入类型:
Fn<C1>( L1 );
Fn<C1>( (List<B>)L1 );
Run Code Online (Sandbox Code Playgroud)
我发现建议说我应该将我的子列表作为基类列表(对我来说失败),并在我的泛型函数Fn中,检查我传递的列表是否属于特定类型,然后执行特定于此的单独代码类型.除了推荐不适合我的演员之外,这似乎打败了OOP的多态性,仍然在泛型函数中具有子类特定代码.
我希望存在一些真正的抽象/通用方法,不再重复代码,从而将我的子列表视为基本列表.
任何人都可以告诉我如何做到这一点?
谢谢.
对于一个类,我试图在Android Studio 2.2中制作一个基本的贺卡应用程序,使用JRE:1.8.0_76-release-b03 构建#AI -145.3276617。
“卡片”在RelativeLayout中包含大图像和少量TextView。
我试图在Android 6.0.1上的Nexus 5 API24仿真器和 物理Nexus 5上进行测试。
当我在模拟器上测试应用程序时,文本颜色显示正确,但是当我在物理设备上运行时,文本颜色是错误的。
我所包含的xml显示了我尝试直接使用十六进制textColor值的方法,但是我也尝试将它们作为资源放置,结果相同。
colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#2196F3</color>
<color name="colorPrimaryDark">#1976D2</color>
<color name="colorPrimaryLight">#BBDEFB</color>
<color name="colorAccent">#FFEB3B</color>
<color name="colorText1">#2196F3</color>
<color name="colorText2">#1976D2</color>
</resources>
Run Code Online (Sandbox Code Playgroud)
我的activity_main.xml文件。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
tools:context="com.touchspin.hnspd.MainActivity"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
android:src="@drawable/background" />
<TextView
android:id="@+id/happy"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="Happy"
android:textSize="72sp"
android:layout_marginTop="100dp"
android:textColor="#1976D2" />
<TextView
android:id="@+id/national"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="National"
android:textSize="40sp"
android:layout_below="@id/happy"
android:textColor="#2196F3" …
Run Code Online (Sandbox Code Playgroud)