Java通用数据类型
基类将通过数据类型接收未知的数据结构。派生类需要重写printObj方法才能打印数据类型对象的内容。对于本例,数据类型对象包含一个字符串字段。如何重写printObj()以打印字符串消息变量的内容Java通用数据类型,java,Java,基类将通过数据类型接收未知的数据结构。派生类需要重写printObj方法才能打印数据类型对象的内容。对于本例,数据类型对象包含一个字符串字段。如何重写printObj()以打印字符串消息变量的内容 // generic class public abstract class Base <T>{ T obj; public Base(T t){ obj = t; } public T getObject(){ return
// 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()代码>?如果需要,将来无法扩展。这不是个好主意。您已经将它绑定到数据
,而只需要一个功能就可以分离出来。什么不能扩展?我可以传递任何不是数据
类型的对象吗?我们在这个问题上对询问者试图构建的内容有着非常不同的想法。如果需要,它在将来无法扩展。这不是个好主意。您已将其绑定到数据
,而只需要分离出一个功能。什么不能扩展?我可以传递任何非数据
类型的对象吗?我们对询问者试图构建的内容有着非常不同的想法。