在C#中,我们可以定义一个泛型class A<T> where T : new().在这段代码中,我们可以创建一个Twith 的实例new T().这是如何在Java中实现的?我读了一些文章说这是不可能的.
我使用的原因是在C#中使用泛型的单例模式:
public static class Singleton<T> where T : new()
{
private static T instance;
public static T Instance
{
get
{
if (instance == null)
{
instance = SingletonCreater.Instance;
}
return instance;
}
}
static class SingletonCreater
{
internal static readonly T Instance = new T();
}
}
Run Code Online (Sandbox Code Playgroud)
并且方法使这种方法更优雅?
我正在尝试创建一个泛型类.这是我的类文件.
public class TestClass<T> implements AbstractDataType<T>{
T[] contents;
public TestClass(int length) {
this.contents = (T[])new Object[length];
}
}
Run Code Online (Sandbox Code Playgroud)
但内容只有从中继承的方法Object class.如何为内容创建抽象数组?
我不确定这是否可以在Java中使用.此外,我无法弄清楚要在Google上查询的内容.无论如何,我想要一个方法,将一个参数作为一个Class(接口或类),方法的返回类型是该类的一个实例.事实上,我不想重铸一个Object.
我不确定这个功能是否存在或语法是什么.假设我有一个名为XYZ的类,这是我的伪方法.
private XYZ createInstance(XYZ.class, other args) {
...
// create an instance of XYZ with other args named "_xyz_"
...
return _xyz_;
}
Run Code Online (Sandbox Code Playgroud)
现在假设XYZ是某种通用语法.这在Java中是否可行?谢谢你的帮助.
是否可以实例化在抽象类中作为泛型类型参数提供的类?
例:
public MyClass {
public MyClass(String test) {
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以在另一个抽象类中实例化这个类?
public abstract class AbstractClass<T extends MyClass> {
public AbstractClass() {
T t = new T("test"); //Cannot instantiate the type T
}
}
Run Code Online (Sandbox Code Playgroud) 我想基于列表的类型(即Truck)实例化一个对象并添加到列表中,我尝试下面的内容,但它警告我"sun.reflect.generics.reflectiveObjects.TypeVariableImpl与java.lang不兼容.类"
public <T extends Car> void addRow(List<T> list) {
Class<T> clazz = (Class<T>) ((ParameterizedType) list.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
T newInstance = clazz.newInstance();
list.add(newInstance);
}
Run Code Online (Sandbox Code Playgroud)
方法调用:
List<Truck> abc = new ArrayList<Truck>;
addRow(abc);
Run Code Online (Sandbox Code Playgroud)
任何帮助?一切都提前!
基本上我要做的是从泛型函数中分配参数化类型:
public < T > T wishful_thinking( )
{
return new T( );
}
Run Code Online (Sandbox Code Playgroud)
由于"对象切片"(即,它编译,但"段错误"),转换也不起作用:
public < T > T wishful_thinking( )
{
return ( T )new Object( );
}
Run Code Online (Sandbox Code Playgroud)
所以...有没有解决方法(也许使用反射或其他一些)?
谢谢!
我想找到发送到泛型类的参数的类名,如下所示.
Run Code Online (Sandbox Code Playgroud)
public abstract class RootClass
<T extends Iface> {
protected ApplicationContext applicationContext;
public T getIfaceBean() {
return applicationContext.getBean(T.class);
}
}
But it looks like I can't do T.class(由于类型擦除?).
那么,Java Generics是否可以采取这样的行动?
如何使用Java Generics实现此类功能?
在Java中执行以下操作的限制背后的逻辑是什么?
public class genericClass<T>{
void foo(){
T t = new T(); //Not allowed
}
}
Run Code Online (Sandbox Code Playgroud)