[英]java generic classes of String non primitive type
我正在研究Java泛型类。 用T作为类型参数创建一个通用类。
public class Genericstring<T> {
String name;
public void set(String name){
this.name = name;
}
public static void main(String[] args){
Genericstring<String> o = new Genericstring<String>();
o.set("Generic");
System.out.println(o.name);
}
}
在上面的示例中,T的类型可以是字符串,整数或任何其他类型。 但是有可能我可以创建具有特定类型参数的泛型类。 类似于下面的示例,但显示错误“无法对非静态类型的String进行静态引用”
public class Genericstring<String> {
String name;
public static void main(String[] args){
//Here creating object always having string type attributes. No need to specify like did in above example.
}
谁能告诉我,是否可以用String作为参数创建类的通用类generictype ? 如果没有,那为什么呢?
Genericstring<String>
声明一个名为String
的类型变量。
这使得String
所有其他用法都引用该类型变量,而不是java.lang.String
。 在main
的参数声明为String[]
,它认为您的意思是类型变量。 而且由于这是一个静态方法,因此您不能在那里引用该类型参数,因为它属于该类的实例。
但是有可能我可以创建具有特定类型参数的泛型类。
您要描述的是一个非泛型类。 删除类型参数。
public class Genericstring {
String name;
// Etc
}
这段代码: Genericstring<String>
仅命名Generic Type Variable,而不是设置为java.lang.String。
您最多可以做的是声明一个扩展特定类的泛型类型:
public class Genericstring<T extends String>
例:
abstract class B<T extends String> {
protected T value;
public T getValue() {
return value;
}
public void handleValue() {
System.out.println(this.getValue().substring(0, 5));
}
}
class C extends B<String>{
public C() {
this.value = "Hello World";
}
}
public class A {
public static void main(String[] args) {
C obj = new C();
obj.handleValue(); // prints Hello
}
}
更新:根据评论,由于我的实施方式,我的回答引起了很多困惑。
@linuxman这不是完成您的方案的唯一方法,当您提到Cant时,您的权利就是我们提到的,就像B or B<T extends String>
? :
class B<T extends String> {
protected T value;
public T getValue() {
return value;
}
public void handleValue() {
System.out.println(this.getValue().substring(0, 5));
}
}
public class A {
public static void main(String[] args) {
B obj = new B<String>();
obj.handleValue();
}
}
@Pshemo是正确的:
在这种情况下,仅可用于字符串的类型是String本身,但是如果仅是一种类型,则没有通用类型是没有意义的,因为它的主要目的是允许我们将我们的类用于许多类型。
参考: https : //stackoverflow.com/a/5181618/1715121
final
课程就是不能扩展的课程。
(这并不意味着所有对该类对象的引用都将像声明为final
那样起作用。)
当将一个类声明为final有用时,请参见此问题的答案:
如果Java是面向对象的,并且您声明了一个
final
类,它是否会停止具有对象特征的类的想法?
从某种意义上说是的。
通过将一个类标记为final,可以禁用该部分代码的强大而灵活的语言功能。 有些类然而,不应该(在某些情况下不能 )设计充分继承考虑的一个好办法。 在这些情况下,将类标记为最终类是有意义的,即使它限制了OOP。 (但是请记住,最后一堂课仍然可以扩展另一个非最后一课。)
相关文章: Java:何时创建最终类
@linuxman您要完成的工作没有任何意义,因为通用类型的目的是声明可以实现不同类型行为的合同。
希望它能帮助您消除疑虑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.