微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在java中增加泛型类型值

如何解决如何在java中增加泛型类型值

我的任务是将给定的类转换为抽象和泛型类,生成泛型类型的值序列,并支持接受初始值的单个构造函数

这是给定的类:

public class Progression {

protected long current;

public Progression(){

    this.current=0;
}

public Progression(long start){
    this.current=start;
}
public long nextValue(){
    long answer= current;
    advance();
    return answer;
}
protected void advance(){
    current++;
}

public void printProgression(int n){
    System.out.println(nextValue());
    for(int j=0;j<n;j++){
        System.out.println(" "+nextValue());
    }
    System.out.println();
}
}

我做了这样的转换:

abstract class ReProgression<T> {
protected T current;
public ReProgression(T start){
    current=start;
}
public T nextValue(){
    T answer= current;
    advance();
    return answer;
}
public void advance(){


}
public void printProgression(int n){
    System.out.println(nextValue());
    for(int j=0;j<n;j++){
        System.out.println(" "+nextValue());
    }
    System.out.println();
}

}

如何在函数提前()函数增加通用值“当前”?

解决方法

可能的解决方案 1

进步是一个需要定义的术语。 在 Progression 的初始示例中,您正在推进 long,因此很容易确定如何推进。只需增加数字。 当您将它从 long 转换为泛型类型时,您不再知道该类型是什么(因此是泛型),因此您必须以某种方式定义如何前进。泛型类型 T 必须 定义“前进”时的 bavious。在 Java 中执行此操作的标准方法是使用 接口

我会创造这样的东西 -

public interface Advancable{
   public void advance();
}

在你的 ReProgression 类中,你会像这样使用这个接口 -

abstract class ReProgression<T extends Advancable> {
   protected T current;
   public ReProgression(T start){
      current=start;
   }
   public T nextValue(){
      T answer= current;
      advance();
      return answer;
   }
   public void advance(){
      current.advance();
   }
   public void printProgression(int n){
      System.out.println(nextValue());
      for(int j=0;j<n;j++){
         System.out.println(" "+nextValue());
      }
      System.out.println();
   }
}

这就是解决方案。然而,我应该讨论如何调用代码。 在最初的示例 Progression 中,您可以像这样调用它,例如 -

Progression p  = new Progression(1);
p.printProgression(5);

哪个会产生输出

 1
 2
 3
 4
 5

要对 ReProgression 执行相同的操作,您可能会像这样调用它 -

MyAdvancable<Long> startValue = new MyAdvancable<Long>(5);
ReProgression rp = new ReProgression(startValue);
rp.printProgression(5);

但您还需要定义 MyAdvancable

可能的解决方案 2

你自己几乎就有了正确的答案。您的问题是“将给定的类转换为抽象的通用类”。声明类抽象只有在至少有一个 abstract method 时才有意义。通常这是因为在编写代码时不知道或定义行为。这听起来很像您的问题中评论的未知“推进”机制。所以你所拥有的几乎就是你的解决方案。只需删除 Advance() 方法的主体 -

abstract class ReProgression<T> {

   protected T current;

   public ReProgression(T start){
      current=start;
   }

   public T nextValue(){
      T answer= current;
      advance();
      return answer;
   }

   abstract void advance();

   public void printProgression(int n){
      System.out.println(nextValue());
      for(int j=0;j<n;j++){
         System.out.println(" "+nextValue());
      }
      System.out.println();
   }

}

我有两个解决方案的原因是因为根据您的问题,并且没有更多关于您的书当前章节所涵盖的主题的背景知识,对我来说这两个解决方案中的任何一个都是可能的,您需要决定哪个如果有的话,这些可能是您的解决方案。祝您在学习 Java 的过程中一切顺利!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。