【问题标题】:Java How to produce generic class that accepts a String and integer?Java 如何生成接受字符串和整数的泛型类?
【发布时间】:2013-02-12 03:18:22
【问题描述】:

我正在尝试熟悉 java 中的泛型。我仍然不确定如何创建一个简单的类来获取两种类型(字符串、整数)。下面是在我的上下文中使用泛型的简单尝试。

public class Container <T>
{

  public T aString()
  {
     //Do i know I have a string?
  }

  public T anInt()
  {
    //How do I know I have an integer?
  }

  public Container<T>()
  {
    //What would the constructor look like?
  }


}

我正在引用此页面oracle generics,但我仍然不确定我在这里做什么。你首先弄清楚你在课堂上的“T”是什么类型吗?

泛型编程真的用于接口和抽象类吗?

【问题讨论】:

  • 试图将泛型集合中的对象类型限制为两个类(String 和 Integer),这两个类没有 Object 的共同祖先似乎有点勉强。

标签: java class generics


【解决方案1】:

Container 类实际上可以保存 String、Integer 或任何类型,您只需正确使用它即可。像这样的:

public class Container<T> {
    private T element;

    public T getElement() {
        return element;
    }

    public void setElement(T element) {
        this.element = element;
    }

    public Container(T someElement) {
        this.element = someElement;
    }
}

你可以这样使用它:

Container<Integer> myIntContainer = new Container<Integer>();
myIntContainer.setElement(234);

或者...

Container<String> myStringContainer = new Container<String>();
myStringContainer.setElement("TEST");

【讨论】:

  • 感谢您的回复。这不是我想看到/听到的。但是构造函数呢?那会是什么样子?
  • 您可以将 T 类型的参数传递给您的构造函数。我将编辑此答案以添加示例...
【解决方案2】:

如果该类对 String 和 Integer 做了显着不同的事情,也许它应该是两个类,每个类都专门针对其中一种类型。

我认为泛型对于可以以相同方式处理不同类型的引用的情况很有用。 ArrayList&lt;String&gt;ArrayList&lt;Integer&gt; 不需要任何特定于字符串或整数的代码。

【讨论】:

    【解决方案3】:

    如果您想使用StringInteger,您可能必须使用Object 作为类型。坦率地说,这消除了泛型的大部分好处,您可能应该检查您是否确实有一个健全的模型和交织字符串和整数的原因。

    但是,它对接口、自定义类和抽象很有用。这意味着您可以保证对象是正确的类型,并且无需为每种类型的事物每次都实现它们。

    【讨论】:

      【解决方案4】:
      Class type = Integer.class
      Integer i = verifyType("100",type);
      

      表示整数,类似于字符串...

      参考Java Generics with Class <T>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-29
        • 2015-08-28
        相关资源
        最近更新 更多