所有!我现在已经把这些东西打破了几个小时。对不起,如果它是如此微不足道的东西,但我想我不太了解Java泛型。我是一名新手Java程序员。
我有2个接口。 Int1和Int2。 Int2扩展了Int1。 Int2Impl实现Int2。 Lesson1.java和AnotherClass.java也在下面给出。课后问题如下。
Int1.java
def load_new_data(self):
full = list()
with open(self.filename, 'r') as csv_in:
myreader2 = csv.reader(csv_in, delimiter=';')
count = 0
for row in myreader2:
if count == 0:
headers = row[1:]
count += 1
elif count == 1:
count += 1
else:
current_row = row[1:-1]
full.append(current_row)
count += 1
new_df = pd.DataFrame.from_records(full, columns=headers)
new_df = new_df.iloc[1:, :80]
self.fill_in_blanks(new_df)
new_df = dp.remove_inc_variables(new_df, .1)
print ('\t Removing incomplete variables.')
for i in new_df.columns:
try:
new_df.loc[:, i] = new_df.loc[:, i].astype(float)
except:
pass
return new_df
Int2.java
public interface Int1<E> {
public Lesson1<E> interfaceimpl(Class<E> klass);
}
Lesson1.java
public interface Int2<E> extends Int1<E> {
String getSomething();
}
Int2Impl.java
public class Lesson1<E> {
}
AnotherClass.java
public class Int2Impl<E> implements Int2<E> {
Class<E> klass;
@Override
public String getSomething() {
return "nothing";
}
@Override
public Lesson1<E> interfaceimpl(Class<E> klass) {
this.klass = klass;
return null;
}
}
导致编译问题的代码行是
interface2.interfaceimpl(克拉斯);在AnotherClass.java类中
Eclipse提供的错误和快速修正:
错误:
public class AnotherClass<E> {
private Int2<E> interface2;
private <E> void newMethod(Class<E> klass) {
interface2 = new Int2Impl<>();
**interface2.interfaceimpl(klass);**
}
}
快速修正:
The method interfaceimpl(java.lang.Class<E>) in the type Int1<E> is not
applicable for the arguments (java.lang.Class<E>)
没有一个快速修复对我有意义。此外,无论我选择哪一个,他们也无法解决问题。有人可以 指出错误以及为什么Eclipse会抛出此错误?
谢谢!
答案 0 :(得分:4)
您的AnotherClass
已经是通用类型E
。无需在方法级别再次定义E
。
只需从您的<E>
中移除newMethod()
,如下所示:
public class AnotherClass<E> {
private Int2<E> interface2;
private void newMethod(Class<E> klass) {
interface2 = new Int2Impl<>();
interface2.interfaceimpl(klass);
}
}