Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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 - Fatal编程技术网

Java通用数据类型

Java通用数据类型,java,Java,基类将通过数据类型接收未知的数据结构。派生类需要重写printObj方法才能打印数据类型对象的内容。对于本例,数据类型对象包含一个字符串字段。如何重写printObj()以打印字符串消息变量的内容 // generic class public abstract class Base <T>{ T obj; public Base(T t){ obj = t; } public T getObject(){ return

基类将通过数据类型接收未知的数据结构。派生类需要重写printObj方法才能打印数据类型对象的内容。对于本例,数据类型对象包含一个字符串字段。如何重写printObj()以打印字符串消息变量的内容

// generic class
public abstract class Base <T>{
    T obj;
    public Base(T t){
        obj = t;
    }
    public T getObject(){
        return obj;
    }
    public void setObject(T t){
        obj = t;
    }
    public abstract void printObj();
}
// specific class
public class Derived<T> extends Base<T>{
    public Derived(T t) {
        super(t);
    }
    @Override
    public void printObj() {
        //?????
    }
}
// data can be changed
public class Data {
    String message;
    public Data(String msg){
    message = msg;
    }
}
// application class
public class App {
    public static void main(String[] args) {
        Data d = new Data("Hello");
        Derived<Data> dClass = new Derived<Data>(d);
        dClass.printObj();
    }
} 
//泛型类
公共抽象类基{
T-obj;
公共基地(T){
obj=t;
}
公共T getObject(){
返回obj;
}
公共无效集合对象(T){
obj=t;
}
公共摘要void printObj();
}
//特定类别
公共类派生的扩展基{
公共派生(T){
超级(t);
}
@凌驾
public void printObj(){
//?????
}
}
//数据可以更改
公共类数据{
字符串消息;
公共数据(字符串消息){
消息=消息;
}
}
//应用程序类
公共类应用程序{
公共静态void main(字符串[]args){
数据d=新数据(“你好”);
派生类=新派生类(d);
dClass.printObj();
}
} 

派生的
中的
T
可以是任何内容,因此编译器不知道它有一个
消息
字段。也许你想要

public class Derived<T extends Data> extends Base<T>

Derived
中的
T
可以是任何内容,因此编译器不知道它有一个
消息
字段。也许你想要

public class Derived<T extends Data> extends Base<T>
在中,策略模式(也称为策略模式)是允许在运行时选择的行为的

战略模式

  • 定义了一系列算法
  • 封装每个算法,并
  • 使算法在该族中可互换
  • 他们已经被证明了。模式反映了在自己的工作中成功使用这些模式的开发人员的经验、知识和见解
  • 它们是可重复使用的。模式提供了一个现成的解决方案,可以根据需要适应不同的问题
  • 它们富有表现力。模式提供了一个通用的解决方案词汇表,可以简洁地表达大型解决方案

通过使用一个简单的
接口
,分离出可打印的功能/算法,您可以使用上述设计模式轻松解决此问题。这种类型的任何对象都称为可打印对象

class Derived<T extends Printable> extends Base<T> {
    ...
    @Override
    public void print() {
        ((Printable)getObject()).print();
    }
}
现在应该是这样的
T扩展了可打印的
,这意味着任何类型的
Printable

abstract class Base<T extends Printable> implements Printable{...}
这里,
Data
是一个可打印的对象,只需实现
printable
接口即可

class Data implements Printable {
    String message;
    ...
    @Override
    public void print() {
        System.out.println(message);
    }
}
让我们再创建一个类,以了解使用此设计模式的好处,这是使用
T extends Data
无法实现的

class NonData implements Printable {
    String message;
    ...
    @Override
    public void print() {
        System.out.println(message);
    }
}
主要类别:

Data d = new Data("Hello");
Derived<Data> dClass = new Derived<Data>(d);
dClass.printObj(); // output Hello


NonData d1 = new NonData("Bye");
Derived<NonData> dClass1 = new Derived<NonData>(d1);
dClass1.printObj(); // output Bye
Data d=新数据(“你好”);
派生类=新派生类(d);
dClass.printObj();//输出你好
非数据d1=新的非数据(“再见”);
衍生dClass1=新衍生(d1);
dClass1.printObj();//输出再见
在中,策略模式(也称为策略模式)是允许在运行时选择的行为的

战略模式

  • 定义了一系列算法
  • 封装每个算法,并
  • 使算法在该族中可互换
  • 他们已经被证明了。模式反映了在自己的工作中成功使用这些模式的开发人员的经验、知识和见解
  • 它们是可重复使用的。模式提供了一个现成的解决方案,可以根据需要适应不同的问题
  • 它们富有表现力。模式提供了一个通用的解决方案词汇表,可以简洁地表达大型解决方案

通过使用一个简单的
接口
,分离出可打印的功能/算法,您可以使用上述设计模式轻松解决此问题。这种类型的任何对象都称为可打印对象

class Derived<T extends Printable> extends Base<T> {
    ...
    @Override
    public void print() {
        ((Printable)getObject()).print();
    }
}
现在应该是这样的
T扩展了可打印的
,这意味着任何类型的
Printable

abstract class Base<T extends Printable> implements Printable{...}
这里,
Data
是一个可打印的对象,只需实现
printable
接口即可

class Data implements Printable {
    String message;
    ...
    @Override
    public void print() {
        System.out.println(message);
    }
}
让我们再创建一个类,以了解使用此设计模式的好处,这是使用
T extends Data
无法实现的

class NonData implements Printable {
    String message;
    ...
    @Override
    public void print() {
        System.out.println(message);
    }
}
主要类别:

Data d = new Data("Hello");
Derived<Data> dClass = new Derived<Data>(d);
dClass.printObj(); // output Hello


NonData d1 = new NonData("Bye");
Derived<NonData> dClass1 = new Derived<NonData>(d1);
dClass1.printObj(); // output Bye
Data d=新数据(“你好”);
派生类=新派生类(d);
dClass.printObj();//输出你好
非数据d1=新的非数据(“再见”);
衍生dClass1=新衍生(d1);
dClass1.printObj();//输出再见

您尝试过什么?这是泛型的一个基本概念,有成千上万的解释,如果你做
derivedclass2=new-Derived(newint[]{1,2,3,4,5}),你希望发生什么;dClass2.printObj()?您尝试了什么?这是泛型的一个基本概念,有成千上万的解释,如果你做
derivedclass2=new-Derived(newint[]{1,2,3,4,5}),你希望发生什么;dClass2.printObj()?如果需要,将来无法扩展。这不是个好主意。您已经将它绑定到
数据
,而只需要一个功能就可以分离出来。什么不能扩展?我可以传递任何不是
数据
类型的对象吗?我们在这个问题上对询问者试图构建的内容有着非常不同的想法。如果需要,它在将来无法扩展。这不是个好主意。您已将其绑定到
数据
,而只需要分离出一个功能。什么不能扩展?我可以传递任何非
数据
类型的对象吗?我们对询问者试图构建的内容有着非常不同的想法。