Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一般问题。遗产_Java_Generics - Fatal编程技术网

Java 一般问题。遗产

Java 一般问题。遗产,java,generics,Java,Generics,我厌倦了下面的问题。请帮忙? 我有一个下面的界面 /** * <T> Type of Timestamp. For ex: Date, long, Calendar etc * */ public interface TimeStamp<T> extends Comparable<TimeStamp<T>> { /** * Returns the timestamp. * @return */ public T getTimeStamp

我厌倦了下面的问题。请帮忙? 我有一个下面的界面

/**
* <T> Type of Timestamp. For ex: Date, long, Calendar etc
* 
*/
public interface TimeStamp<T> extends Comparable<TimeStamp<T>>
{

/**
* Returns the timestamp. 
 * @return 
*/
 public T getTimeStamp();

 }
/**
*时间戳的类型。例如:日期、长度、日历等
* 
*/
公共接口时间戳
{
/**
*返回时间戳。
*@返回
*/
公共T getTimeStamp();
}
在我的代码中,我有两个列表:

    List<FileTimeStamp> f = new ArrayList<FileTimeStamp>();
    List<DefaultTimeStamp> t = new ArrayList<DefaultTimeStamp>();
listf=newarraylist();
List t=new ArrayList();
我想创建一个方法,它接受上面两个包含时间戳的列表,然后合并它们。 例:

void合并(列表l1、列表l2)
{
l1.addAll(l2);
集合。排序(l1);
}
但是上面的代码会生成编译时警告

无效合并(列表l1、列表l2)
泛型类时间戳缺少类型参数
其中T是一个类型变量: T扩展接口时间戳中声明的对象

在没有编译时警告的情况下,我应该如何定义上述方法?我的
无效合并(列表>l2)
应该是什么????在左边是?

这对我很有用

public interface TimeStamp<T> extends Comparable<TimeStamp<T>> {
    public T getTimeStamp();
}
public class FileTimeStamp<T> implements TimeStamp<T>{

    @Override
    public int compareTo(TimeStamp<T> arg0) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public T getTimeStamp() {
        // TODO Auto-generated method stub
        return null;
    }

}
public class DefaultTimeStamp<T> implements TimeStamp<T>{

    @Override
    public int compareTo(TimeStamp<T> arg0) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public T getTimeStamp() {
        // TODO Auto-generated method stub
        return null;
    }

}
public class Abcd<T> {
    public static void main(String[] args) {
        List<FileTimeStamp<Date>> l1 = new ArrayList<FileTimeStamp<Date>>();
        List<DefaultTimeStamp<Long>> l2 = new ArrayList<DefaultTimeStamp<Long>>();
        Abcd abcd = new Abcd();
        abcd.merge(l1, l2);
    }

    void merge(List<TimeStamp> l1, List<TimeStamp> l2)  {
        l1.addAll(l2);
        Collections.sort(l1);
    }
}
公共接口时间戳{
公共T getTimeStamp();
}
公共类FileTimeStamp实现时间戳{
@凌驾
公共整数比较(时间戳arg0){
//TODO自动生成的方法存根
返回0;
}
@凌驾
公共T getTimeStamp(){
//TODO自动生成的方法存根
返回null;
}
}
公共类DefaultTimeStamp实现时间戳{
@凌驾
公共整数比较(时间戳arg0){
//TODO自动生成的方法存根
返回0;
}
@凌驾
公共T getTimeStamp(){
//TODO自动生成的方法存根
返回null;
}
}
公开课{
公共静态void main(字符串[]args){
列表l1=新的ArrayList();
列表l2=新的ArrayList();
Abcd Abcd=新的Abcd();
合并(l1,l2);
}
无效合并(列表l1、列表l2){
l1.addAll(l2);
集合。排序(l1);
}
}
这对我很有用

public interface TimeStamp<T> extends Comparable<TimeStamp<T>> {
    public T getTimeStamp();
}
public class FileTimeStamp<T> implements TimeStamp<T>{

    @Override
    public int compareTo(TimeStamp<T> arg0) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public T getTimeStamp() {
        // TODO Auto-generated method stub
        return null;
    }

}
public class DefaultTimeStamp<T> implements TimeStamp<T>{

    @Override
    public int compareTo(TimeStamp<T> arg0) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public T getTimeStamp() {
        // TODO Auto-generated method stub
        return null;
    }

}
public class Abcd<T> {
    public static void main(String[] args) {
        List<FileTimeStamp<Date>> l1 = new ArrayList<FileTimeStamp<Date>>();
        List<DefaultTimeStamp<Long>> l2 = new ArrayList<DefaultTimeStamp<Long>>();
        Abcd abcd = new Abcd();
        abcd.merge(l1, l2);
    }

    void merge(List<TimeStamp> l1, List<TimeStamp> l2)  {
        l1.addAll(l2);
        Collections.sort(l1);
    }
}
公共接口时间戳{
公共T getTimeStamp();
}
公共类FileTimeStamp实现时间戳{
@凌驾
公共整数比较(时间戳arg0){
//TODO自动生成的方法存根
返回0;
}
@凌驾
公共T getTimeStamp(){
//TODO自动生成的方法存根
返回null;
}
}
公共类DefaultTimeStamp实现时间戳{
@凌驾
公共整数比较(时间戳arg0){
//TODO自动生成的方法存根
返回0;
}
@凌驾
公共T getTimeStamp(){
//TODO自动生成的方法存根
返回null;
}
}
公开课{
公共静态void main(字符串[]args){
列表l1=新的ArrayList();
列表l2=新的ArrayList();
Abcd Abcd=新的Abcd();
合并(l1,l2);
}
无效合并(列表l1、列表l2){
l1.addAll(l2);
集合。排序(l1);
}
}

如果您关心类型安全,则必须具有相同的类型

您的问题的解决方案是:

public static <T> void  merge(List<T> left, List< ? extends T> right) {
         left.addAll(right);
}
我们将无法:

 merge(fileTimeList, defaultTimeList);
成功的关键是必须将
右侧
列表项分配给
左侧
列表中的项目类型

在合并wan进行排序之后,这是任务的另一部分。要对列表进行排序,存储在列表中的类应实现接口
Comparable

因此,我们最终的结构如下:

    public interface TimeStamp extends Comparable<TimeStamp> {

    }

    public interface DefaultTimeStamp extends TimeStamp {

    }

    public interface FileTimeStamp extends TimeStamp {

    }
所以我们可以说你有你想要的



但我会将操作和使用分开,在这里描述它是如何工作的;合并后,我将对其进行排序

如果您关心类型安全,则必须具有相同的类型

您的问题的解决方案是:

public static <T> void  merge(List<T> left, List< ? extends T> right) {
         left.addAll(right);
}
我们将无法:

 merge(fileTimeList, defaultTimeList);
成功的关键是必须将
右侧
列表项分配给
左侧
列表中的项目类型

在合并wan进行排序之后,这是任务的另一部分。要对列表进行排序,存储在列表中的类应实现接口
Comparable

因此,我们最终的结构如下:

    public interface TimeStamp extends Comparable<TimeStamp> {

    }

    public interface DefaultTimeStamp extends TimeStamp {

    }

    public interface FileTimeStamp extends TimeStamp {

    }
所以我们可以说你有你想要的



但我会将操作和使用分开,在这里描述它是如何工作的;合并后,我将对其进行排序

您的方法merge()是正确的。您所需要做的就是使用适当的数据类型来初始化f和t。请看下面我的答案。您的方法merge()是正确的。您所需要做的就是使用适当的数据类型来初始化f和t。看看我下面的答案。但我们如何处理时间戳的类型呢。我们需要声明一个要合并的类型-public T getTimeStamp();答案并没有涵盖这一点,更多的是关于泛型的工作原理。如果你仍然有问题,我会在几个小时内编辑答案,以适应你的情况。但我认为在这一点上,你应该设法自己去做。非常感谢你的帮助。这只是为了学习。我有正在运行的代码,只是我正在努力完善它。理想情况下,人们希望时间戳具有定义的类型。但我们如何处理时间戳的类型呢。我们需要声明一个要合并的类型-public T getTimeStamp();答案并没有涵盖这一点,更多的是关于泛型的工作原理。如果你仍然有问题,我会在几个小时内编辑答案,以适应你的情况。但我认为在这一点上,你应该设法自己去做。非常感谢你的帮助。这只是为了学习。我有正在运行的代码,只是我正在努力完善它。理想情况下,人们希望时间戳具有定义的类型。