1 回答

TA貢獻(xiàn)1825條經(jīng)驗 獲得超4個贊
我能做到這一點的唯一兩種方法是添加一個指定類型的構(gòu)造函數(shù)參數(shù):
MyClass<Float> instance = new MyClass<>(0.f).withFoo(42).withBar("helloworld");
或者通過添加“終端投射”方法:
public class MyClass<T> {
// ...
public MyClass() { ... }
public <U> MyClass<U> cast() {
MyClass<U> copy = new MyClass<>();
return copy.withFoo(foo).withBar(bar);
}
public MyClass<T> withFoo(int foo) { ... }
public MyClass<T> withBar(String bar) { ... }
}
然后你可以像這樣調(diào)用它:
MyClass<Float> instance = new MyClass<>().withFoo(42).withBar("helloworld").cast();
第三種方法是提供一個MyClass<Float>專門用于創(chuàng)建實例的工廠方法:
static MyClass<Float> newFloatInstance() { return new MyClass<>(); }
然后你可以像這樣調(diào)用它:
MyClass<Float> instance = newFloatInstance().withFoo(42).withBar("helloworld");
但我猜你可能真的不想為每種可能的類型都使用工廠方法。
但是請注意,如果您能夠在不向 cast 方法(或構(gòu)造函數(shù))提供將其實例與其MyClass類型參數(shù)相關(guān)聯(lián)的情況下執(zhí)行此操作,那么您實際上不需要類上的類型變量。
您可以將類型變量推送到需要該類型變量的方法上:
public class MyClass {
// ...
public <T> T doSomethingToSpecificType(List<T> list, T arg) {
// do something type-specific.
}
}
添加回答
舉報