Java泛型使用困难
我是java的新手。我在理解泛型方面有困难。根据我的理解,我编写了下面的演示程序来理解泛型,但是有错误。需要帮助Java泛型使用困难,java,generics,Java,Generics,我是java的新手。我在理解泛型方面有困难。根据我的理解,我编写了下面的演示程序来理解泛型,但是有错误。需要帮助 class GenDemoClass <I,S> { private S info; public GenDemoClass(S str) { info = str; } public void displaySolidRect(I length,I width) { I tempLengt
class GenDemoClass <I,S>
{
private S info;
public GenDemoClass(S str)
{
info = str;
}
public void displaySolidRect(I length,I width)
{
I tempLength = length;
System.out.println();
while(length > 0)
{
System.out.print(" ");
for(int i = 0 ; i < width; i++)
{
System.out.print("*");
}
System.out.println();
length--;
}
info = "A Rectangle of Length = " + tempLength.toString() + " and Width = " + width.toString() + " was drawn;";
}
public void displayInfo()
{
System.out.println(info);
}
}
public class GenDemo
{
public static void main(String Ar[])
{
GenDemoClass<Integer,String> GDC = new GenDemoClass<Integer,String>("Initailize");
GDC.displaySolidRect(20,30);
GDC.displayInfo();
}
}
如果将非整数的内容传递到
I length
文件,会发生什么情况?现在你并不是说它应该是任何特定的类型,所以如果你传入一个字符串,这行会发生什么
while(length > 0)
这里假设
length
是一个整数,而将其定义为I
该>
操作对于任意类I
无效,使用前应检查instanceof
if (I instanceof Integer){
// code goes here
}
问题是大多数对象不能使用>操作符 如果声明类型
I
必须是Number
的子类型,则可以在比较中将类型I的实例转换为int原语。比如说
class GenDemoClass <I extends Number,S>
{
public void displaySolidRect(I length,I width)
{
I tempLength = length;
System.out.println();
while(length.intValue() > 0)
{
}
在我看来,这不是泛型的适当用法,因为使用基本整数类型不会带来任何好处。您无法比较数字和
I
,它们几乎可以是任何东西。如果你声明“代码> GenDemoClass < /代码>是的,我已经考虑过了,但是我正在尝试一个演示……我假设只通过整数。因此,根据这个假设,我在思考我是整数的占位符,因此进一步编码了。如果这是可行的,那么我的假设是正确的。谢谢你的回复如果你已经解决了这个问题,你可能想接受@michaels answer。是的,一开始我就想到了这个问题,但我首先更多地参与了解决另一个问题。谢谢你的回答。谢谢你的回答。是的,这只是一个理解泛型的演示程序,所以没有注意到程序的有用性。第二个问题我也有问题也就是说,当我传递字符串类型时…我应该为第二种类型扩展字符串类吗?当然你可以说S扩展字符串。但在这种情况下,为什么还要用泛型来表示S呢?
class GenDemoClass <I extends Number,S>
{
public void displaySolidRect(I length,I width)
{
I tempLength = length;
System.out.println();
while(length.intValue() > 0)
{
}
public void displaySolidRect(I length,I width)
{
int intLength = length.intValue();
int intHeight = width.intValue();
System.out.println();
while(intLength > 0)
{
// iterate as you normally would, decrementing the int primitives
}