Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.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-如何在泛型类中调用我的类T的方法_Java_Generics_Methods - Fatal编程技术网

Java-如何在泛型类中调用我的类T的方法

Java-如何在泛型类中调用我的类T的方法,java,generics,methods,Java,Generics,Methods,我的类ListFromFile有问题,它扩展了ArrayList。 在该类中,我想创建一个方法,通过其id属性查找元素并返回它 T可以是来自学生、教师等类的对象。所有这些类都有一个测试id的equals方法 我的问题是我不能使用equals方法来测试ListFromFile中的id 这是我的密码: public class ListFromFile<T> extends ArrayList<T> implements Serializable { public T

我的类
ListFromFile
有问题,它扩展了
ArrayList
。 在该类中,我想创建一个方法,通过其
id
属性查找元素并返回它

T
可以是来自学生、教师等类的对象。所有这些类都有一个测试id的equals方法

我的问题是我不能使用equals方法来测试
ListFromFile
中的id

这是我的密码:

public class ListFromFile<T> extends ArrayList<T> implements Serializable {
    public T getElement(int id) {
        for ( T o : this ) {
             if ( o.equals((int)id) ) {
                  return o;
             }
        }

        return null;
    }
}
公共类ListFromFile扩展ArrayList实现可序列化{
公共T getElement(int-id){
对于(TO:这个){
if(o.equals((int)id)){
返回o;
}
}
返回null;
}
}
即使我在equals方法中指定了一个id,该id是int,
getElement()
也找不到该元素

经过一些搜索,似乎我必须通过学生、教师等扩展T,但如何扩展多个类


谢谢您

以下是示例应用程序,演示如何解决此问题:

import java.io.Serializable;
import java.util.ArrayList;

public class test2 {
    // define basic interface for all objects
    interface ObjectWithID {
        public int getId();
    }

    public static class Teacher implements ObjectWithID {
        private final int id;

        public Teacher(final int id) {
            this.id = id;
        }

        @Override
        public int getId() {
            return this.id;
        }
    }

    public static class Student implements ObjectWithID {
        private final int id;

        public Student(final int id) {
            this.id = id;
        }

        @Override
        public int getId() {
            return this.id;
        }
    }

    // note T extends syntax
    public static class ListFromFile<T extends ObjectWithID> extends ArrayList<T> implements Serializable {
        public T getElement(final int id) {
            for (final T o : this)
                if (o.getId() == id)
                    return o;
            return null;
        }
    }

    public static void main(final String[] args) {
        final ListFromFile list = new ListFromFile<>();

        list.add(new Teacher(1));
        list.add(new Teacher(2));
        list.add(new Teacher(3));

        list.add(new Student(4));
        list.add(new Student(5));
        list.add(new Student(6));

        System.out.println(list.getElement(1)); // print teacher
        System.out.println(list.getElement(4)); // print student
    }
}
import java.io.Serializable;
导入java.util.ArrayList;
公共类test2{
//为所有对象定义基本接口
接口对象WithID{
public int getId();
}
公共静态类教师实现ObjectWithID{
私有最终int id;
公共教师(最终国际id){
this.id=id;
}
@凌驾
公共int getId(){
返回此.id;
}
}
公共静态类Student实现ObjectWithID{
私有最终int id;
公立学生(最终国际id){
this.id=id;
}
@凌驾
公共int getId(){
返回此.id;
}
}
//注意T扩展了语法
公共静态类ListFromFile扩展ArrayList实现可序列化{
公共T getElement(最终整数id){
对于(最终目标:本)
if(o.getId()==id)
返回o;
返回null;
}
}
公共静态void main(最终字符串[]args){
最终ListFromFile列表=新建ListFromFile();
增加(新教师(1));
增加(新教师(2));
增加(新教师(3名));
列表。添加(新学生(4));
列表。添加(新学生(5));
列表。添加(新学生(6));
System.out.println(list.getElement(1));//打印教师
System.out.println(list.getElement(4));//打印学生
}
}

下面是一个示例应用程序,演示如何解决此问题:

import java.io.Serializable;
import java.util.ArrayList;

public class test2 {
    // define basic interface for all objects
    interface ObjectWithID {
        public int getId();
    }

    public static class Teacher implements ObjectWithID {
        private final int id;

        public Teacher(final int id) {
            this.id = id;
        }

        @Override
        public int getId() {
            return this.id;
        }
    }

    public static class Student implements ObjectWithID {
        private final int id;

        public Student(final int id) {
            this.id = id;
        }

        @Override
        public int getId() {
            return this.id;
        }
    }

    // note T extends syntax
    public static class ListFromFile<T extends ObjectWithID> extends ArrayList<T> implements Serializable {
        public T getElement(final int id) {
            for (final T o : this)
                if (o.getId() == id)
                    return o;
            return null;
        }
    }

    public static void main(final String[] args) {
        final ListFromFile list = new ListFromFile<>();

        list.add(new Teacher(1));
        list.add(new Teacher(2));
        list.add(new Teacher(3));

        list.add(new Student(4));
        list.add(new Student(5));
        list.add(new Student(6));

        System.out.println(list.getElement(1)); // print teacher
        System.out.println(list.getElement(4)); // print student
    }
}
import java.io.Serializable;
导入java.util.ArrayList;
公共类test2{
//为所有对象定义基本接口
接口对象WithID{
public int getId();
}
公共静态类教师实现ObjectWithID{
私有最终int id;
公共教师(最终国际id){
this.id=id;
}
@凌驾
公共int getId(){
返回此.id;
}
}
公共静态类Student实现ObjectWithID{
私有最终int id;
公立学生(最终国际id){
this.id=id;
}
@凌驾
公共int getId(){
返回此.id;
}
}
//注意T扩展了语法
公共静态类ListFromFile扩展ArrayList实现可序列化{
公共T getElement(最终整数id){
对于(最终目标:本)
if(o.getId()==id)
返回o;
返回null;
}
}
公共静态void main(最终字符串[]args){
最终ListFromFile列表=新建ListFromFile();
增加(新教师(1));
增加(新教师(2));
增加(新教师(3名));
列表。添加(新学生(4));
列表。添加(新学生(5));
列表。添加(新学生(6));
System.out.println(list.getElement(1));//打印教师
System.out.println(list.getElement(4));//打印学生
}
}

下面是一个示例应用程序,演示如何解决此问题:

import java.io.Serializable;
import java.util.ArrayList;

public class test2 {
    // define basic interface for all objects
    interface ObjectWithID {
        public int getId();
    }

    public static class Teacher implements ObjectWithID {
        private final int id;

        public Teacher(final int id) {
            this.id = id;
        }

        @Override
        public int getId() {
            return this.id;
        }
    }

    public static class Student implements ObjectWithID {
        private final int id;

        public Student(final int id) {
            this.id = id;
        }

        @Override
        public int getId() {
            return this.id;
        }
    }

    // note T extends syntax
    public static class ListFromFile<T extends ObjectWithID> extends ArrayList<T> implements Serializable {
        public T getElement(final int id) {
            for (final T o : this)
                if (o.getId() == id)
                    return o;
            return null;
        }
    }

    public static void main(final String[] args) {
        final ListFromFile list = new ListFromFile<>();

        list.add(new Teacher(1));
        list.add(new Teacher(2));
        list.add(new Teacher(3));

        list.add(new Student(4));
        list.add(new Student(5));
        list.add(new Student(6));

        System.out.println(list.getElement(1)); // print teacher
        System.out.println(list.getElement(4)); // print student
    }
}
import java.io.Serializable;
导入java.util.ArrayList;
公共类test2{
//为所有对象定义基本接口
接口对象WithID{
public int getId();
}
公共静态类教师实现ObjectWithID{
私有最终int id;
公共教师(最终国际id){
this.id=id;
}
@凌驾
公共int getId(){
返回此.id;
}
}
公共静态类Student实现ObjectWithID{
私有最终int id;
公立学生(最终国际id){
this.id=id;
}
@凌驾
公共int getId(){
返回此.id;
}
}
//注意T扩展了语法
公共静态类ListFromFile扩展ArrayList实现可序列化{
公共T getElement(最终整数id){
对于(最终目标:本)
if(o.getId()==id)
返回o;
返回null;
}
}
公共静态void main(最终字符串[]args){
最终ListFromFile列表=新建ListFromFile();
增加(新教师(1));
增加(新教师(2));
增加(新教师(3名));
列表。添加(新学生(4));
列表。添加(新学生(5));
列表。添加(新学生(6));
System.out.println(list.getElement(1));//打印教师
System.out.println(list.getElement(4));//打印学生
}
}

下面是一个示例应用程序,演示如何解决此问题:

import java.io.Serializable;
import java.util.ArrayList;

public class test2 {
    // define basic interface for all objects
    interface ObjectWithID {
        public int getId();
    }

    public static class Teacher implements ObjectWithID {
        private final int id;

        public Teacher(final int id) {
            this.id = id;
        }

        @Override
        public int getId() {
            return this.id;
        }
    }

    public static class Student implements ObjectWithID {
        private final int id;

        public Student(final int id) {
            this.id = id;
        }

        @Override
        public int getId() {
            return this.id;
        }
    }

    // note T extends syntax
    public static class ListFromFile<T extends ObjectWithID> extends ArrayList<T> implements Serializable {
        public T getElement(final int id) {
            for (final T o : this)
                if (o.getId() == id)
                    return o;
            return null;
        }
    }

    public static void main(final String[] args) {
        final ListFromFile list = new ListFromFile<>();

        list.add(new Teacher(1));
        list.add(new Teacher(2));
        list.add(new Teacher(3));

        list.add(new Student(4));
        list.add(new Student(5));
        list.add(new Student(6));

        System.out.println(list.getElement(1)); // print teacher
        System.out.println(list.getElement(4)); // print student
    }
}
import java.io.Serializable;
导入java.util.ArrayList;
公共类test2{
//为所有对象定义基本接口
接口对象WithID{
public int getId();
}
公共静态课堂教师的实现