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

我是java的新手。我在理解泛型方面有困难。根据我的理解,我编写了下面的演示程序来理解泛型,但是有错误。需要帮助

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
        }