很长一段时间,我一直试图让一段代码工作,而这是不可能的。我所要求的类需要一个我设置为Integer的泛型。所以我尝试了下面的内容:
public class a<T> //set generics for this function
{
private T A;
protected boolean d;
public a(final T A)
{
this.A = A;
//do calculations
//since constructor cannot return a value, pass to another function.
this.d = retnData(Integer.parseInt(A.toString()) != 100); //convert to an integer, the backwards way.
}
private boolean retnData(boolean test)
{
return test;
}
}
// IN ANOTHER CLASS
transient a<Integer> b;
boolean c = b.d = b.a(25); // throws an erorr: (Int) is not apporpriate for a<Integer>.a
Java不允许这样做,因为java看到int!= Integer,即使两者都接受相同的数据。并且由于仿制药的工作方式,我无法设置b;因为int类型的原始性。即使转换为Integer也不起作用,因为它仍会抛出“类型错误”
finnaly,我不得不问一下这方面是否有某种解决方法,或者试图让它发挥作用是徒劳的?
答案 0 :(得分:4)
您正尝试将构造函数显式调用为实例方法。这不能用Java完成。
也许你想要:
transient a<Integer> b = new a<Integer>(25);
boolean c = b.d;
但是,由于d
被声明为protected
,因此仅当此代码位于从a
派生的另一个类或同一个包中时才会有效。
答案 1 :(得分:2)
使用
final a<Integer> b = new a<Integer>(10);
boolean c = b.d;
int可以使用new Integer(10
)或Integer.valueOf(10)
答案 2 :(得分:1)
代码没有多大意义:b
是a
类型的对象,它没有a
方法 - 因此不确定您对{{1}的期望}; ...这与b.a(25)
vs int
...