我写了一些通用方法。它适用于第一级后代。但它失败了二级后代的对象。
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp"
android:background="@color/homebackground"
tools:context="com.test.test.HomeActivity">
<LinearLayout //CHANGE THIS TO RELATIVE LAYOUT
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center">
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
app:cardUseCompatPadding="true"
app:cardCornerRadius="25dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="@font/open_sans"
android:text="Text"
android:textColor="@color/textColor"
android:paddingTop="15dp"
android:paddingStart="15dp"
android:paddingEnd="15dp"
android:paddingBottom="5dp"/>
<View
android:layout_width="290dp"
android:layout_height="1dp"
android:background="@color/gray" />
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="@font/open_sans"
android:text="Text"
android:textColor="@color/textColor"
android:paddingTop="5dp"
android:paddingStart="15dp"
android:paddingEnd="15dp"
android:paddingBottom="5dp"/>
<View
android:layout_width="290dp"
android:layout_height="1dp"
android:background="@color/gray" />
<TextView
android:id="@+id/textView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="@font/open_sans"
android:text="Text"
android:textColor="@color/textColor"
android:paddingTop="5dp"
android:paddingStart="15dp"
android:paddingEnd="15dp"
android:paddingBottom="15dp"/>
</LinearLayout>
</android.support.v7.widget.CardView>
//PLACE YOUR TITLE VIEW HERE
</LinearLayout>
编译失败: 错误:(29,9)java:类com.company.Main中的方法f不能应用于
package com.company;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static <T extends Comparable<T>> int f(List<T> list, T item) {
return 0;
}
static class A implements Comparable<A> {
@Override
public int compareTo(A o) {
return 0;
}
}
static class B extends A {
}
public static void main(String[] args) {
List<A> as = new ArrayList<A>();
List<B> bs = new ArrayList<B>();
A a = new A();
B b = new B();
f(as, a); // works
f(bs, b); // <-------- error
}
}
为什么Java无法猜测等式变量类型?
答案 0 :(得分:3)
您的函数T
的类型参数f
必须按照您的定义Comparable<T>
实施<T extends Comparable<T>>
。 B
不实施Comparable<B>
,而是Comparable<A>
。如果您希望能够使用B
调用该函数,则该类应实现Comparable<B>
,例如像这样
static class B extends A implements Comparable<B> {
@Override
public int compareTo(B o) {
return super.compareTo(o);
}
}
否则,您可以更改f
的类型参数,以便T
成为Comparable
类的子类。
public static <T extends Comparable<? super T>> int f(List<T> list, T item) {
return 0;
}