Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.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中,仅使用传递的参数generic type创建实例 私有静态字符串映射结果(T objNew){ T obj=新的T(); ... }_Java_Generics - Fatal编程技术网

Java中,仅使用传递的参数generic type创建实例 私有静态字符串映射结果(T objNew){ T obj=新的T(); ... }

Java中,仅使用传递的参数generic type创建实例 私有静态字符串映射结果(T objNew){ T obj=新的T(); ... },java,generics,Java,Generics,它给了我一个错误“不能实例化类型T”。如何创建实例?谢谢你,你不能这样做。类型T可以是任何类型,包括不能自身实例化的接口和抽象类。即使传递了非抽象类,空构造函数也可能不存在。如果您希望传递某些内容以便能够创建某个类的新实例,那么您可以传递某个工厂类,该工厂类通过某种方法为您创建这些新实例。您不能这样做。类型T可以是任何类型,包括不能自身实例化的接口和抽象类。即使传递了非抽象类,空构造函数也可能不存在。如果您希望传递一些东西来创建某个类的新实例,那么您可以传递一些工厂类,这些工厂类通过某种方法为您

它给了我一个错误“不能实例化类型T”。如何创建实例?谢谢你,你不能这样做。类型
T
可以是任何类型,包括不能自身实例化的接口和抽象类。即使传递了非抽象类,空构造函数也可能不存在。如果您希望传递某些内容以便能够创建某个类的新实例,那么您可以传递某个工厂类,该工厂类通过某种方法为您创建这些新实例。

您不能这样做。类型
T
可以是任何类型,包括不能自身实例化的接口和抽象类。即使传递了非抽象类,空构造函数也可能不存在。如果您希望传递一些东西来创建某个类的新实例,那么您可以传递一些工厂类,这些工厂类通过某种方法为您创建这些新实例。

您可以更改方法参数以接受
Supplier
构造函数,并传递类似
MyClass::new

公共类MyClass{
公共MyClass(){}
公共MyClass(字符串s){…}
}
公共静态void main(字符串[]args){
mapQueryResults(MyClass::new);
mapQueryResults(()->新MyClass(“测试”));
}   
私有静态字符串映射结果(供应商objNew){
T obj=objNew.get();
...
}

您可以更改方法参数以接受
Supplier
构造函数,并传入类似
MyClass::new

公共类MyClass{
公共MyClass(){}
公共MyClass(字符串s){…}
}
公共静态void main(字符串[]args){
mapQueryResults(MyClass::new);
mapQueryResults(()->新MyClass(“测试”));
}   
私有静态字符串映射结果(供应商objNew){
T obj=objNew.get();
...
}

当出现类似的话题时,我的方法是“忘记编程,逻辑思考。”

警察问道

仅使用传递的参数generic type创建实例

基本上,你需要一个构造器来基于一些通用的东西构建一个具体的东西。这在现实生活中可能吗?假设你需要构建“某物”,然后你去找一个构建者,告诉构建者“我希望你为我构建某物”,并且不提供上下文,也不提供其他信息。期望建设者能够构建您需要的东西是否现实?当然答案是否定的。除非您详细说明所需内容,否则构建者将不知道要构建什么

T
或其他人已经提到的“type”可以是任何东西。如果语言允许这样做,您很可能最终没有可用的东西。这就像是把
T
变成面团一样。除非你明确告诉某人你想要比萨饼、面包或面粉玉米饼,否则如果你只知道“面团”,你就不可能指望有人做你想要的东西

不同的“类型”对施工有不同的要求。事实上,一些“类型”根本无法构建(它们可能有一个私有构造函数)。其他构造函数隐藏在静态工厂方法后面。简言之,这根本不可能的原因太多了

综上所述,您认为应该有一种方法可以将一组不同的“类型”参数传递给某个函数,并最终生成不同类型的具体对象,这并不是真的错误。如果这就是您所想的,那么您需要的是一个支持此概念的设计模式

在《四人帮》原著中,您将发现5种创造性设计模式:

  • 抽象工厂-构建物族的工厂(即工厂工厂)
  • 生成器-分阶段构建对象(通常在对象过于复杂时)
  • 工厂方法-构建单一类型对象(或基于公共抽象的不同事物)的工厂
  • 原型-基于另一个对象创建新对象
  • Singleton—确保创建单个实例

  • 基于原始帖子中的少量信息,我认为OP需要实现工厂方法或原型模式。

    当出现类似主题时,我的方法是“忘记编程,逻辑思考”

    警察问道

    仅使用传递的参数generic type创建实例

    基本上,你需要一个构造器来基于一些通用的东西构建一个具体的东西。这在现实生活中可能吗?假设你需要构建“某物”,然后你去找一个构建者,告诉构建者“我希望你为我构建某物”,并且不提供上下文,也不提供其他信息。期望建设者能够构建您需要的东西是否现实?当然答案是否定的。除非您详细说明所需内容,否则构建者将不知道要构建什么

    T
    或其他人已经提到的“type”可以是任何东西。如果语言允许这样做,您很可能最终没有可用的东西。这就像是把
    T
    变成面团一样。除非你明确告诉某人你想要比萨饼、面包或面粉玉米饼,否则如果你只知道“面团”,你就不可能指望有人做你想要的东西

    不同的“类型”对施工有不同的要求。事实上,一些“类型”根本无法构建(它们可能有一个私有构造函数)。其他构造函数隐藏在静态工厂方法后面。简言之,这根本不可能的原因太多了

    尽管如此,你认为应该有一个w并不是真的错误
    private static <T> String mapQueryResults(T objNew) {
        T obj = new T();
        ...
    }