Java通用,这是最好的方法吗?
这是我的示例代码Java通用,这是最好的方法吗?,java,generics,Java,Generics,这是我的示例代码 public class Example { static interface Data { } static interface Source<D extends Data> { public D read(); } static class Stream<S extends Source<D>, D extends Data> { public S source
public class Example {
static interface Data {
}
static interface Source<D extends Data> {
public D read();
}
static class Stream<S extends Source<D>, D extends Data> {
public S source;
public Stream(S source){
this.source = source;
}
public D get() {
return this.source.read();
}
}
static class SampleData implements Data {
}
static class SampleSource implements Source<SampleData> {
@Override
public SampleData read() {
return null;
}
}
public static void main(String[] args) {
Stream sampleSourceStream = new Stream<SampleSource, SampleData>();
}
}
公共类示例{
静态接口数据{
}
静态接口源{
公共D read();
}
静态类流{
公共资源;
公共流(S源){
this.source=源;
}
公共D get(){
返回此.source.read();
}
}
静态类SampleData实现数据{
}
静态类SampleSource实现源代码{
@凌驾
公共样本数据读取(){
返回null;
}
}
公共静态void main(字符串[]args){
Stream sampleSourceStream=新流();
}
}
我想省略(为了结构更美观/使用更方便)
静态类流
到
静态类流
或
newstream()
到
newstream()
(我知道它可以在C#…)中省略)
我如何才能省略或制作更漂亮的图案?不要定义
S
,它没有任何用途:
静态类流{
公共来源;
公共流(源){
this.source=源;
}
公共D get(){
返回此.source.read();
}
}
publicstaticvoidmain(字符串[]args){
SampleSource SampleSource=新的SampleSource();
流sampleSourceStream=新流(sampleSource);
}
或者在Java 10+中更简单,使用var
:
publicstaticvoidmain(字符串[]args){
SampleSource SampleSource=新的SampleSource();
var sampleSourceStream=新流(sampleSource);
}
不要定义S
,它没有任何用途:
静态类流{
公共来源;
公共流(源){
this.source=源;
}
公共D get(){
返回此.source.read();
}
}
publicstaticvoidmain(字符串[]args){
SampleSource SampleSource=新的SampleSource();
流sampleSourceStream=新流(sampleSource);
}
或者在Java 10+中更简单,使用var
:
publicstaticvoidmain(字符串[]args){
SampleSource SampleSource=新的SampleSource();
var sampleSourceStream=新流(sampleSource);
}
Unrelated:若要有效,则main
中的代码应为:Stream sampleSourceStream=new Stream(null)
Unrelated:要有效,main
中的代码应该是:Stream sampleSourceStream=new Stream(null)代码>
static class Stream<S extends Source<D>, D extends Data>
static class Stream<S extends Source<D>>
new Stream<SampleSource, SampleData>()
new Stream<SampleSource>()